{"version":3,"file":"MirrorAsyncRoot.chunk.js","mappings":"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CC,8BgC9JD,ukChC+JCC,ciC/JD,krBjCgKCC,WkChKD,gElCiKCC,gBmCjKD,6DnCkKCC,aoClKD,6SpCmKCC,kBqCnKD,6NrCoKCC,0BsCpKD,6gBtCqKCC,kBuCrKD,0NvCsKCC,uBwCtKD,yGxCuKCC,wByCvKD,0HzCwKCC,6B0CxKD,y6B1CyKCC,kB2CzKD,2tL3C0KCC,qB4C1KD,wE5C2KCC,0B6C3KD,u2B7C4KCC,sB8C5KD,0M9C6KCC,2B+C7KD,isC/C8KCC,yBgD9KD,m/FhD+KCC,8BiD/KD,q3SjDgLCC,sBkDhLD,knMlDiLCC,qBmDjLD,guBnDkLCC,oBoDlLD,yRpDmLCC,qBqDnLD,4SrDoLCC,0BsDpLD,iLtDqLCC,wBuDrLD,sMvDsLCC,mBwDtLD,qZxDuLCC,ayDvLD,6gBzDwLCC,kB0DxLD,2D1DyLCC,sB2DzLD,qT3D0LCC,2B4D1LD,2N5D2LCC,sB6D3LD,8Q7D4LCC,2B8D5LD,6E9D6LCC,kB+D7LD,42B/D8LCC,mBgE9LD,87BhE+LCC,wBiE/LD,o3BjEgMCC,mBkEhMD,8uClEiMCC,sBmEjMD,40BnEkMCC,qBoElMD,iwBpEmMCC,qBqEnMD,+JrEoMCC,mBsEpMD,+JtEqMCC,cuErMD,ySvEsMCC,wBwEtMD,0iCxEuMCC,gCyEvMD,iFzEwMCC,+B0ExMD,qY1EyMCC,wB2EzMD,yS3E0MCC,0B4E1MD,oL5E2MCC,gB6E3MD,sP7E4MCC,Q8E5MD,kgE9E6MCC,6B+E7MD,8M/E8MCC,egF9MD,kOhF+MCC,mBiF/MD,wFjFgNCC,wBkFhND,4mBlFiNCC,sBmFjND,8QnFkNCC,2BoFlND,6EpFmNCC,wBqFnND,izVrFoNCC,sBsFpND,m9CtFqNCC,iBuFrND,kvDvFsNCC,yBwFtND,ujDxFuNCC,gByFvND,0OzFwNCC,qB0FxND,+zB1FyNCC,gB2FzND,2Y3F0NCC,kB4F1ND,qe5F2NCC,qB6F3ND,wM7F4NCC,0B8F5ND,2E9F6NCC,qB+F7ND,qG/F8NCC,0BgG9ND,ujEhG+NCC,sBiG/ND,klCjGgOCC,2BkGhOD,y+HlGiOCC,iBmGjOD,iGnGkOCC,eoGlOD,0JpGmOCC,UqGnOD,6ErGoOCC,kBsGpOD,4FtGqOCC,gBuGrOD,mJvGsOCC,WwGtOD,sHxGuOCC,gByGvOD,+VzGyOCC,gB0GzOkB,0K1G0OlBC,gB0G7NoB,miB1G8NpBC,oB2G3OkB,wQ3G4OlBC,oB2G3NoB,2uB3G4NpBC,U4G7OkB,wQ5G8OlBC,U4G7NoB,0W5G8NpBC,W6G/OkB,qjC7GgPlBC,W6GvMoB,0hC7GwMpBC,kB8GjPkB,4uB9GkPlBC,kB8G3MoB,4wB9G4MpBC,c+GnPkB,6M/GoPlBC,c+GrOoB,6U/GsOpBC,gBgHrPkB,+kBhHsPlBC,gBgHzNoB,uzBhH0NpBC,eiHvPkB,w8BjHwPlBC,eiH7MoB,ouDjH8MpBC,iBkHzPkB,wpClH0PlBC,iBkHvMoB,o/DlHwMpBC,gBmH3PkB,w8BnH4PlBC,gBmHhNoB,4mDnHiNpBC,gBoH7PkB,wgCpH8PlBC,gBoHhNoB,ssBpHiNpBC,eqH/PkB,spCrHgQlBC,eqH7MoB,kmErH8MpBC,kBsHjQkB,ivCtHkQlBC,kBsHtMoB,2oItHuMpBC,cuHnQkB,0lCvHoQlBC,cuHnNoB,i2DvHoNpBC,YwHrQkB,6uBxHsQlBC,YwHjOoB,ixBxHkOpBC,YyHvQkB,uiBzHwQlBC,YyH7OoB,ibzH8OpBC,Y0HzQkB,wpC1H0QlBC,Y0H7NoB,wvBCxCjBC,GAAiB,EAqCrB,SAASC,GAAiBvoC,EAAIguB,EAAQz7E,GAErC,IAAMijD,EAASwK,EAAGwoC,mBAAoBxa,EAAQhuB,EAAGyoC,gBAC3CC,EAAS1oC,EAAG2oC,iBAAkB3a,GAAS73E,OAE7C,GAAKq/C,GAAqB,KAAXkzC,EAAgB,MAAO,GAEtC,IAAME,EAAe,iBAAiB1yF,KAAMwyF,GAC5C,GAAKE,EAAe,CAKnB,IAAMC,EAAYzqF,SAAUwqF,EAAc,IAC1C,OAAOr2F,EAAKu2F,cAAgB,OAASJ,EAAS,OAjDhD,SAAuBnrB,EAAQsrB,GAQ9B,IANA,IAAM/3D,EAAQysC,EAAOjnE,MAAO,MACtByyF,EAAS,GAETxsE,EAAOgxC,KAAKx/B,IAAK86D,EAAY,EAAG,GAChCzhE,EAAKmmC,KAAKz/B,IAAK+6D,EAAY,EAAG/3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A,IACA,KACA,GACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,GACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,GACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,GACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,KAGIC,GAAoC,GAEjC9mN,GAAI,EAAGA,GAAI6mN,GAAyBpwN,OAAQuJ,IAAQ,EAC3D8mN,GAAsBppN,KAAK,CAACmpN,GAAyB7mN,IAAI6mN,GAAyB7mN,GAAI,KCq7BxF,IA3iCA,IAAM+mN,GAAoB,CACxB,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAGIC,GAA6B,GAE1BhnN,GAAI,EAAGA,GAAI+mN,GAAkBtwN,OAAQuJ,IAAQ,EACpDgnN,GAAetpN,KAAK,CAACqpN,GAAkB/mN,IAAI+mN,GAAkB/mN,GAAI,KCxiCnE,IAAMozK,GAAS,CACb3gG,KAAM,CAAC,KAAM,MACbgD,MAAO,CAAC,KAAM,MACd8D,QAAS,CAAC,GAAK,KAGX0tI,GAAO,CACXx0I,KAAM,CAAC,OACP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","sources":["components/LeftSideActions/styles.ts","components/LeftSideActions/index.tsx","components/Carousel/FrameCatalog/index.tsx","components/Carousel/LensCatalog/styles.ts","components/Carousel/LensCatalog/index.tsx","components/Carousel/index.tsx","../node_modules/html-parse-stringify/src/parse-tag.js","../node_modules/html-parse-stringify/src/parse.js","../node_modules/html-parse-stringify/src/stringify.js","../node_modules/html-parse-stringify/src/index.js","../node_modules/html-escaper/esm/index.js","../node_modules/react-i18next/dist/es/Trans.js","components/TransitionView/Toggle/styles.ts","components/TransitionView/Toggle/index.tsx","components/TransitionView/styles.tsx","components/TransitionView/index.tsx","components/QRCodeModal/styles.tsx","components/QRCodeModal/index.tsx","components/AddPrescriptionModal/styles.ts","components/AddPrescriptionModal/index.tsx","pages/LiveTryOn.tsx","components/PictureMode/PictureModeView.tsx","components/VideoMode/VideoModeView/index.tsx","Routes.tsx","VMWidget.tsx","components/AvailableMode.tsx","components/Carousel/ColorsCatalog/index.tsx","components/Carousel/styles.ts","components/ErrorBoundary/styles.ts","components/ErrorBoundary/index.tsx","components/ErrorModal/styles.ts","components/ErrorModal/index.tsx","components/FooterActions/styles.ts","components/Price/styles.tsx","components/Price/index.tsx","components/core/Icons/ArrowRightIcon.tsx","components/FooterActions/index.tsx","components/InitColorSwatches/index.tsx","components/PrivacyPolicy/styles.tsx","components/PrivacyPolicy/PrivacyPolicyWrapper/styles.tsx","components/PrivacyPolicy/PrivacyPolicyWrapper/index.tsx","services/vtoApiService.ts","hooks/useBipaContent.ts","components/PrivacyPolicy/BipaModal.tsx","components/OrientationScreen/styles.tsx","components/OrientationScreen/index.tsx","hooks/useSetDocumentHeight.ts","hooks/useDeviceOrientation.ts","components/PrivacyPolicy/PrivacyPolicyModal.tsx","components/PrivacyPolicy/TermsAndConditionsModal.tsx","components/Layout/normalize.ts","components/Layout/index.tsx","components/Loader/index.tsx","components/Loader/loader.tsx","components/Loader/styles.tsx","components/Menu/MenuList.tsx","components/Info/styles.ts","components/Info/index.tsx","components/Menu/index.tsx","components/Menu/styles.ts","components/PictureMode/TakePicture/TakePictureInstructions.tsx","components/PictureMode/TakePicture/index.tsx","components/PictureMode/TakePicture/styles.tsx","components/PictureMode/UploadPicture/UploadButton/styles.tsx","hooks/useUpload.ts","components/PictureMode/UploadPicture/UploadButton/index.tsx","components/PictureMode/UploadPicture/index.tsx","components/PictureMode/index.tsx","components/PictureMode/styles.tsx","components/PictureVideoError/styles.ts","components/PictureVideoError/index.tsx","hooks/useQueryParams.ts","components/ProtectedRoute.tsx","services/vmApiService.ts","components/QRCodeModal/QRCode/styles.tsx","schemas/vmData.ts","components/QRCodeModal/QRCode/index.tsx","components/QrCodeUi.tsx","components/RightSIdeActions/styles.ts","components/core/Icons/WishlistFilledIcon.tsx","components/Wishlist/index.tsx","hooks/useWishlist.ts","components/LensActivation/styles.ts","components/LensActivation/index.tsx","components/RightSIdeActions/index.tsx","libs/getColorFromStyle.ts","libs/getFontFromStyle.ts","libs/saveScreenshot.ts","components/ScreenshotPreview/ScreenshotImage/styles.tsx","components/ScreenshotPreview/ScreenshotImage/index.tsx","components/ScreenshotPreview/styles.ts","components/ScreenshotPreview/index.tsx","hooks/useShare.ts","components/VMInitialize/index.tsx","hooks/useVmInitParams.ts","components/VideoMode/VideoFaceScan/styles.tsx","components/VideoMode/VideoFaceScan/index.tsx","components/VideoMode/VideoScanInstructions/styles.ts","components/VideoMode/VideoScanInstructions/index.tsx","components/core/BackButton.tsx","components/core/Button.tsx","components/core/Drawer/styles.tsx","components/core/Drawer/index.tsx","components/core/Icons/AlertIcon.tsx","components/core/Icons/CloseIcon.tsx","components/core/Icons/NavBarActionScan.tsx","components/core/Icons/NavBarActionVideo.tsx","components/core/Icons/NavBarActionPicture.tsx","components/core/Icons/WishlistIcon.tsx","components/core/Icons/RefreshIcon.tsx","components/core/Icons/ChooseLens.tsx","components/core/Icons/ChooseColor.tsx","components/core/Icons/ChooseFrame.tsx","components/core/Icons/LightIcon.tsx","components/core/Icons/LightLessIcon.tsx","components/core/Icons/CameraIcon.tsx","components/core/Icons/UploadIcon.tsx","components/core/Icons/FaceShapeIcon.tsx","components/core/Icons/SunIcon.tsx","components/core/Icons/CaretLeftIcon.tsx","components/core/Icons/CartIcon.tsx","components/core/Icons/NoGlassesIcon.tsx","components/core/Icons/ShareIcon.tsx","components/core/Icons/SaveIcon.tsx","components/core/Icons/InfoIcon.tsx","components/core/Icons/FocusIcon.tsx","components/core/Icons/ArrowIcon.tsx","components/core/Icons/QRCodeIcon.tsx","components/core/Icons/RotateIcon.tsx","components/core/Icons/RotateIconDesktop.tsx","components/core/Icons/MenuOpen.tsx","components/core/Icons/MenuClose.tsx","components/core/Icons/CloseScreenshotIcon.tsx","components/core/Icons/CheckIcon.tsx","components/core/Icons/RelaxFaceIcon.tsx","components/core/Icons/EyeglassesOffIcon.tsx","components/core/Icons/HoldDeviceIcon.tsx","components/core/Icons/TransitionIconReduced.tsx","components/core/Icons/TransitionsIcon.tsx","components/core/Icons/TurnFaceIcon.tsx","components/core/Modal/styles.ts","components/core/Modal/index.tsx","components/core/Overlay/styles.ts","components/core/Overlay/index.tsx","components/core/StickyButton/index.tsx","components/core/StickyButton/styles.tsx","hooks/useAddToCart.ts","hooks/useAlternativePath.ts","hooks/useAnimationApp.ts","hooks/useAsync.ts","hooks/useDimensions.tsx","hooks/useInterval.tsx","hooks/useModal.ts","hooks/useMoveGlassObserver.ts","hooks/usePortalDiv.tsx","hooks/useRefValue.ts","hooks/useVirtualMirrorApp.ts","hooks/useScreenshot.ts","hooks/useUpcAvailability.tsx","utils/I18NextMergeBackend.ts","i18n.ts","libs/analytics/utils.ts","libs/analytics/helpers.ts","libs/analytics/componentTracking.ts","libs/analytics/errors.ts","libs/analytics/clicks.ts","libs/analytics/events.ts","libs/analytics/impressions.ts","libs/analytics/hooks.ts","libs/getColorSwatches.ts","libs/styled.ts","libs/transition.ts","libs/truncateString.ts","libs/utils.ts","pages/PictureMode.tsx","pages/PrivacyPolicy/styles.tsx","components/core/Icons/CloseLineIcon.tsx","pages/PrivacyPolicy/index.tsx","pages/VideoMode.tsx","components/VMInitialize/styles.ts","providers/VmProvider.tsx","components/VtoInitialize/index.tsx","hooks/useVtoInitParams.ts","components/VtoInitialize/styles.tsx","providers/Vto.tsx","providers/VtoProvider.tsx","providers/configProvider.ts","services/apiService.ts","store/actions/animationApp.ts","store/actions/configurator.ts","store/actions/privacyPolicy.tsx","store/actions/products.ts","store/actions/ui.ts","store/actions/wishlist.tsx","store/index.ts","store/reducers/ui.ts","store/reducers/animationApp.ts","store/reducers/privacyPolicy.tsx","store/reducers/products.tsx","store/reducers/wishlist.tsx","store/reducers/configurator.ts","store/reducers/index.ts","store/localStorage.ts","theme.ts","utils/cookies.ts","utils/filterColors.ts","utils/language.ts","utils/region.ts","utils/routes.ts","../node_modules/three/src/math/Plane.js","../node_modules/three/src/math/Frustum.js","../node_modules/three/src/renderers/webgl/WebGLAttributes.js","../node_modules/three/src/renderers/webgl/WebGLBindingStates.js","../node_modules/three/src/renderers/webgl/WebGLBufferRenderer.js","../node_modules/three/src/renderers/webgl/WebGLCapabilities.js","../node_modules/three/src/renderers/webgl/WebGLClipping.js","../node_modules/three/src/math/Ray.js","../node_modules/three/src/math/Triangle.js","../node_modules/three/src/materials/Material.js","../node_modules/three/src/math/ColorManagement.js","../node_modules/three/src/math/Color.js","../node_modules/three/src/materials/MeshBasicMaterial.js","../node_modules/three/src/objects/Mesh.js","../node_modules/three/src/geometries/BoxGeometry.js","../node_modules/three/src/renderers/shaders/UniformsUtils.js","../node_modules/three/src/extras/ImageUtils.js","../node_modules/three/src/materials/ShaderMaterial.js","../node_modules/three/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js","../node_modules/three/src/textures/Source.js","../node_modules/three/src/textures/Texture.js","../node_modules/three/src/renderers/WebGLRenderTarget.js","../node_modules/three/src/cameras/Camera.js","../node_modules/three/src/cameras/PerspectiveCamera.js","../node_modules/three/src/cameras/CubeCamera.js","../node_modules/three/src/textures/CubeTexture.js","../node_modules/three/src/renderers/WebGLCubeRenderTarget.js","../node_modules/three/src/renderers/webgl/WebGLCubeMaps.js","../node_modules/three/src/cameras/OrthographicCamera.js","../node_modules/three/src/extras/PMREMGenerator.js","../node_modules/three/src/renderers/webgl/WebGLCubeUVMaps.js","../node_modules/three/src/renderers/webgl/WebGLExtensions.js","../node_modules/three/src/renderers/webgl/WebGLGeometries.js","../node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.js","../node_modules/three/src/renderers/webgl/WebGLInfo.js","../node_modules/three/src/renderers/webgl/WebGLObjects.js","../node_modules/three/src/textures/DataArrayTexture.js","../node_modules/three/src/textures/Data3DTexture.js","../node_modules/three/src/renderers/webgl/WebGLUniforms.js","../node_modules/three/src/renderers/webgl/WebGLShader.js","../node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk.js","../node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/common.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/encodings_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/packing.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/background.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/cube.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/depth.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/equirect.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/linedashed.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/meshbasic.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/meshlambert.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/meshnormal.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/meshphong.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/meshphysical.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/meshtoon.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/points.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/shadow.glsl.js","../node_modules/three/src/renderers/shaders/ShaderLib/sprite.glsl.js","../node_modules/three/src/renderers/webgl/WebGLProgram.js","../node_modules/three/src/renderers/webgl/WebGLShaderCache.js","../node_modules/three/src/renderers/shaders/UniformsLib.js","../node_modules/three/src/renderers/shaders/ShaderLib.js","../node_modules/three/src/renderers/webgl/WebGLPrograms.js","../node_modules/three/src/renderers/webgl/WebGLProperties.js","../node_modules/three/src/renderers/webgl/WebGLRenderLists.js","../node_modules/three/src/materials/MeshDepthMaterial.js","../node_modules/three/src/materials/MeshDistanceMaterial.js","../node_modules/three/src/renderers/webgl/WebGLShadowMap.js","../node_modules/three/src/renderers/shaders/ShaderLib/vsm.glsl.js","../node_modules/three/src/renderers/webgl/WebGLState.js","../node_modules/three/src/renderers/webgl/WebGLTextures.js","../node_modules/three/src/renderers/webgl/WebGLUtils.js","../node_modules/three/src/cameras/ArrayCamera.js","../node_modules/three/src/renderers/webgl/WebGLAnimation.js","../node_modules/three/src/objects/Group.js","../node_modules/three/src/renderers/webxr/WebXRController.js","../node_modules/three/src/textures/DepthTexture.js","../node_modules/three/src/renderers/webxr/WebXRManager.js","../node_modules/three/src/renderers/webgl/WebGLUniformsGroups.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/webgl/WebGLAnimation.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/constants.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/MathUtils.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Quaternion.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Vector3.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Vector2.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Box3.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/core/EventDispatcher.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/core/BufferAttribute.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Sphere.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Matrix4.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Euler.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/core/Layers.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Matrix3.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/core/Object3D.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/utils.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/core/BufferGeometry.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/geometries/BoxGeometry.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/geometries/PlaneGeometry.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/materials/Material.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/UniformsUtils.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/materials/ShaderMaterial.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/ColorManagement.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Color.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Ray.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Triangle.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/materials/MeshBasicMaterial.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/objects/Mesh.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/extras/ImageUtils.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderChunk.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/background.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/cube.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/depth.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/equirect.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/linedashed.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/meshbasic.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/meshlambert.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/meshnormal.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/meshphong.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/meshphysical.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/meshtoon.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/points.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/shadow.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib/sprite.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/UniformsLib.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/shaders/ShaderLib.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/webgl/WebGLBackground.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/textures/Source.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/textures/Texture.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/textures/DataArrayTexture.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/math/Vector4.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/webgl/WebGLMorphtargets.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/webgl/WebGLLights.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/webgl/WebGLRenderStates.js","../node_modules/@luxottica/glasses-rt-webglrenderer/node_modules/three/src/renderers/webgl/WebGLMaterials.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/shaderChunks/bending.pars.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/shaderChunks/bending.vertex.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/shaderChunks/tapering.pars.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/shaderChunks/tapering.vertex.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/shaderChunks/tapering.func.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/shaderChunks/fade.pars.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/shaderChunks/fade.vertex.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/shaderChunks/fade.frag.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/shaderChunks/fadeDither.pars.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/shaderChunks/fadeDither.frag.glsl.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/GlassesRTWebGLRenderer.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/utils.js","../node_modules/@luxottica/glasses-rt-webglrenderer/src/GLTFGlassesParser.ts","../node_modules/@luxottica/glasses-rt-webglrenderer/src/SceneSorter.ts","../node_modules/@luxottica/virtual-mirror/src/constants/Styling.ts","../node_modules/@luxottica/virtual-mirror/src/app/mirror/ErrorBoundary.tsx","../node_modules/@luxottica/virtual-mirror/src/app/gui/BipaErrorOverlay.tsx","../node_modules/@luxottica/virtual-mirror/src/app/gui/LoadingSpinner.tsx","../node_modules/@luxottica/virtual-mirror/src/app/mirror/MirrorLoader.tsx","../node_modules/@luxottica/virtual-mirror/src/app/mirror/MirrorAsyncRoot.tsx","../node_modules/@luxottica/virtual-mirror/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-is/index.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/components/Context.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/utils/batch.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/utils/Subscription.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/components/Provider.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/utils/bindActionCreators.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/connect/mergeProps.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/connect/connect.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/hooks/useSelector.js","../node_modules/@luxottica/virtual-mirror/node_modules/react-redux/es/index.js","../node_modules/react-ga/dist/esm/utils/console/warn.js","../node_modules/react-ga/dist/esm/components/OutboundLink.js","../node_modules/react-ga/dist/esm/utils/trim.js","../node_modules/react-ga/dist/esm/utils/toTitleCase.js","../node_modules/react-ga/dist/esm/utils/format.js","../node_modules/react-ga/dist/esm/utils/mightBeEmail.js","../node_modules/react-ga/dist/esm/utils/console/log.js","../node_modules/react-ga/dist/esm/utils/testModeAPI.js","../node_modules/react-ga/dist/esm/core.js","../node_modules/react-ga/dist/esm/utils/loadGA.js","../node_modules/react-ga/dist/esm/utils/removeLeadingSlash.js","../node_modules/react-ga/dist/esm/index.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/constants/Environment.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/config/GlassesApiConfig.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/config/CatalogueApiConfig.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/helpers/UpcAvailabilityResponse/NotAvailable.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/helpers/UpcAvailabilityResponse/Standard.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/CatalogService.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/helpers/UpcAvailabilityResponse/QATool.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/Catalog.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/AssetDecoder.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/remotelog/AppViewSessionKeys.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/constants/AssetNames.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/constants/GltfDefault.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/constants/MockAssetData.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/error/GenericError.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/error/GlassesDownloadError.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/error/GlassesDownloadForbiddenError.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/error/GlassesNotFoundError.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/helpers/AssetHelper.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/GlassesExtractor.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/ZipDownloader.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-glasses/src/GlassesDownloader.ts","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/components/Context.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/utils/batch.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/utils/Subscription.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/components/Provider.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/utils/bindActionCreators.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/connect/mergeProps.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/connect/connect.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/hooks/useSelector.js","../node_modules/@luxottica/vto-core/node_modules/react-redux/es/index.js","../node_modules/@luxottica/vto-core/src/constants/errors.ts","../node_modules/@luxottica/vto-core/src/app/render/cache/GlassesCache.ts","../node_modules/@luxottica/vto-core/src/app/render/cache/VideoCache.ts","../node_modules/@luxottica/vto-core/src/helpers/AnalyticsHelper.ts","../node_modules/@luxottica/vto-core/src/helpers/ParameterHelper.ts","../node_modules/@luxottica/vto-core/src/functions/GetScreenshot.ts","../node_modules/@luxottica/vto-core/src/helpers/VtoInstanceContainer.ts","../node_modules/@luxottica/vto-core/src/constants/actions.ts","../node_modules/@luxottica/vto-core/src/reducers/renderReducer.ts","../node_modules/@luxottica/vto-core/src/functions/CloseRenderFunction.tsx","../node_modules/@luxottica/vto-core/src/helpers/CallbackHelper.ts","../node_modules/@luxottica/vto-core/src/config/acceptance.js","../node_modules/@luxottica/vto-core/src/config/development.js","../node_modules/@luxottica/vto-core/src/config/development-localserver.js","../node_modules/@luxottica/vto-core/src/config/integration.js","../node_modules/@luxottica/vto-core/src/config/production.js","../node_modules/@luxottica/vto-core/src/config/staging.js","../node_modules/@luxottica/vto-core/src/reducers/appReducer.ts","../node_modules/@luxottica/vto-core/src/helpers/GlassesHelper.ts","../node_modules/@luxottica/vto-core/src/VtoApi.ts","../node_modules/@luxottica/vto-core/src/helpers/EnvironmentHelper.ts","../node_modules/@luxottica/vto-core/src/helpers/LocalizationHelper.ts","../node_modules/@luxottica/vto-core/src/interfaces/InitializeOptions.ts","../node_modules/@luxottica/vto-core/src/functions/InitializeFunction.tsx","../node_modules/@luxottica/vto-core/src/interfaces/VtoCoreEnvironment.ts","../node_modules/@luxottica/vto-core/src/functions/IsUpcSupportedFunction.tsx","../node_modules/@luxottica/vto-core/src/app/render/LoadingSpinner.tsx","../node_modules/@luxottica/vto-core/src/helpers/TransitionColorHelper.ts","../node_modules/@luxottica/vto-core/src/helpers/DownloadHelper.ts","../node_modules/@luxottica/vto-core/src/icons/RotateIcon.tsx","../node_modules/@luxottica/vto-core/src/app/render/debug/PupilOverlay.tsx","../node_modules/@luxottica/vto-core/src/helpers/OverlayHelper.ts","../node_modules/@luxottica/vto-core/src/app/render/debug/PupilImageOverlay.tsx","../node_modules/@luxottica/vto-core/src/app/render/debug/MeshCenterOverlay.tsx","../node_modules/@luxottica/vto-core/src/app/render/debug/RenderDebugOverlay.tsx","../node_modules/@luxottica/vto-core/src/app/render/RenderCanvas.tsx","../node_modules/@luxottica/vto-core/src/helpers/MathHelper.ts","../node_modules/@luxottica/vto-core/src/icons/DoubleFingerIcon.tsx","../node_modules/@luxottica/vto-core/src/app/render/SwipeableContainer.tsx","../node_modules/@luxottica/vto-core/src/app/render/RenderContainer.tsx","../node_modules/@luxottica/vto-core/src/app/render/RenderError.tsx","../node_modules/@luxottica/vto-core/src/app/render/RenderLoader.tsx","../node_modules/@luxottica/vto-core/src/interfaces/RenderOptions.ts","../node_modules/@luxottica/vto-core/src/functions/RenderFunction.tsx","../node_modules/@luxottica/vto-core/src/constants/Styling.ts","../node_modules/@luxottica/vto-core/src/reducers/combinedReducers.ts","../node_modules/@luxottica/vto-core/src/VtoCore.ts","../node_modules/@luxottica/vto-core/src/Store.ts","../node_modules/@luxottica/vto-core/src/functions/SetTransitionOpacity.ts","../node_modules/@luxottica/vto-core/src/functions/SetTransitionOverrideColor.ts","../node_modules/@luxottica/vto-core/src/functions/setTransitionLensName.ts","../node_modules/@luxottica/vto-core/src/functions/DownloadTransitionColorCatalogue.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Meshes/GlassesInterfaces.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/MaterialInterfaces.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/AttributesDebugMaterial.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Geometry/GlassesB3DGeometry.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/GlassesB3DTransitionMaterial.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/GlassesB3DTransitionMirrorMaterial.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/GlassesB3DGradientMaterial.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Meshes/B3DMesh.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/AssetManager/b3d/b3dbundle.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Helpers/B3DHelper.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Meshes/VTOPackInterfaces.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Meshes/B3DMeshFactories.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/AssetManager/loaders/B3DLoader.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/AssetManager/loaders/B3DGeometryLoader.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/AssetManager/loaders/B3DBSPGeometryLoader.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Geometry/HeadBinaryGeometry.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Renderers/ScriptableRenderingPipelines/GlassesB3DTransitionMirrorSRP.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/HeadStandardShadowMaterial.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Renderers/ScriptableRenderingPipelines/LensStandardTransitionMirrorSRP.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/LensStandardIridescentMaterial.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/LensStandardTransitionMirrorMaterial.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/LensStandardGradientMaterial.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/HeatmapMaterial.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/FeatureBuilder/ShaderChunkReplacer.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Services/LoggingService.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Materials/FeatureBuilder/FeatureMaterialBuilder.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/Helpers/MathUtils.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/AssetManager/loaders/IridescenceMaterialLoaderPlugin.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/src/AssetManager/LensesManager.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/minimal.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/src/index-minimal.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/src/reader.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/src/reader_buffer.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/src/roots.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/src/rpc.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/src/rpc/service.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/src/util/longbits.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/src/util/minimal.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/src/writer.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-core/node_modules/protobufjs/src/writer_buffer.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/node_modules/three/examples/jsm/loaders/GLTFLoader.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/node_modules/three/examples/jsm/loaders/RGBELoader.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/loaders/IridescenceMaterialLoaderPlugin.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/loaders/AssetLoader.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/composer/shaders/SRGBShader.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/BackgroundTexture.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/composer/shaders/CopyShader.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/composer/Pass.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/composer/ShaderPass.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/composer/MaskPass.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/composer/EffectComposer.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/composer/RenderPass.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/composer/shaders/FillShader.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/constants/DefaultGlRenderDebugOptions.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/assets/face_tri_shorts.bin","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/assets/head-6.uvdata","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/constants/RenderType.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/constants/DefaultGlRenderOptions.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/constants/FittingOffset.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/RenderDataUtils.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/FastFittingMode.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/helpers/MathHelper.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/Inspector.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/measure-calculator/data/BygozomaticBreadthSearchAreaIds.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/measure-calculator/data/HeadBreadthSearchAreaIds.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/measure-calculator/data/GeometryData.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/measure-calculator/data/Measurements.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/measure-calculator/calculator/MeasureCalculator.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/objects/HeadPoses.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/GlUtils.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/GlPrograms.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/renderers/DepthRenderer.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/constants/GlassesAssetType.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/PushGlasses.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/GeometryDataEngine.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/assets/def_VTO-VM/px.jpeg","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/constants/Materials.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/constants/envMap/CubeMap.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/assets/def_VTO-VM/nx.jpeg","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/assets/def_VTO-VM/py.jpeg","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/assets/def_VTO-VM/ny.jpeg","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/assets/def_VTO-VM/pz.jpeg","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/assets/def_VTO-VM/nz.jpeg","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/helpers/GeometryHelper.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/helpers/ImageHelper.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/constants/LensesType.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/objects/GlassesSceneData.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/objects/GLTFGlasses.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/objects/Glasses.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/ThreeRender.ts","../node_modules/@luxottica/vto-core/node_modules/@luxottica/vm-renderer-threejs/src/renderers/GlassesInspector.ts","../node_modules/@luxottica/vto-core/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/@luxottica/vto-core/node_modules/react-is/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/index.js","../node_modules/redux-devtools-extension/logOnly.js","../node_modules/redux-devtools-extension/logOnlyInProduction.js","../node_modules/redux-devtools-extension/utils/assign.js","../node_modules/void-elements/index.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"],"sourcesContent":["import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const ActionContainer = styled.div`\n position: absolute;\n top: 23%;\n`\n\nexport const OptionsWrapper = styled.ul`\n display: flex;\n flex-direction: column;\n padding: 0;\n`\n\nexport const OptionStyled = styled.li<{ isActive?: boolean; expand?: boolean }>`\n padding: ${pxToEm(8)};\n border: ${({ isActive, theme }) => isActive && `1px solid ${theme.palette.white[100]}`};\n margin-bottom: ${pxToEm(10)};\n border-radius: ${pxToEm(30)};\n line-height: 0;\n display: flex;\n align-items: center;\n align-self: flex-start;\n box-shadow: 0 2px 24px 0 rgba(0, 0, 0, 0);\n padding-right: ${({ expand }) => expand && '12px'};\n transition: padding-right 0.4s;\n backdrop-filter: ${({ isActive }) => (isActive ? 'blur(3px)' : 'none')};\n background-color: ${({ isActive }) => (isActive ? 'rgba(255,255,255,0.1)' : 'none')};\n white-space: nowrap;\n cursor: pointer;\n\n ${({ theme }) => theme.media.small} {\n margin-bottom: ${pxToEm(22)};\n }\n\n svg {\n g {\n transform: scale(1.5) translate(-5px, -5px);\n }\n }\n`\n\nexport const Label = styled.span<{ toggleText?: boolean }>`\n color: ${({ theme }) => theme.palette.white[100]};\n font: ${({ theme }) => theme.fonts.span};\n margin-left: ${({ toggleText }) => (toggleText ? pxToEm(10) : 0)};\n opacity: ${({ toggleText }) => (toggleText ? '1' : '0')};\n transition: opacity 0.3s;\n display: ${({ toggleText }) => (toggleText ? 'inline' : 'none')};\n`\n","import { ChooseFrameIcon, ChooseColorIcon, ChooseLensIcon } from '@components/core/Icons'\nimport { ActivePanelName } from '@customTypes/transition'\nimport { useAnimation } from '@hooks/useAnimationApp'\nimport {\n trackClickTransitionColor,\n trackClickTransitionFrame,\n trackClickTransitionLens,\n} from '@libs/analytics'\nimport { delay } from 'lodash'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { OptionsWrapper, OptionStyled, ActionContainer, Label } from './styles'\n\ntype OptionValue = {\n name: ActivePanelName\n logo: JSX.Element\n label: string\n analytics: () => void\n}\n\nconst useLeftSideOptions = (): OptionValue[] => {\n const { t } = useTranslation()\n\n return [\n {\n name: 'lens',\n logo: ,\n label: t('transitions.choose-lens'),\n analytics: trackClickTransitionLens,\n },\n {\n name: 'color',\n logo: ,\n label: t('transitions.choose-lens-color'),\n analytics: trackClickTransitionColor,\n },\n {\n name: 'frame',\n logo: ,\n label: t('transitions.choose-frame'),\n analytics: trackClickTransitionFrame,\n },\n ]\n}\n\ninterface OptionProps {\n option: OptionValue\n isActive?: boolean\n onChange: (name: ActivePanelName) => void\n}\n\nconst TIME_TO_HIDE_TOOLTIP = 2000\nconst Option: React.FC = ({ option, onChange, isActive }) => {\n const [expand, setExpand] = useState(false)\n const timer = useRef(null)\n\n useEffect(() => {\n if (isActive) {\n setExpand(true)\n timer.current = delay(() => setExpand(false), TIME_TO_HIDE_TOOLTIP)\n } else {\n setExpand(false)\n }\n\n return () => {\n if (timer.current) {\n clearTimeout(timer.current)\n }\n }\n }, [isActive])\n\n const cbOnStart = useCallback(() => {\n setExpand(true)\n }, [])\n\n const cbOnEnd = useCallback(() => {\n setExpand(false)\n }, [])\n\n useAnimation(true, !expand, cbOnStart, cbOnEnd, 'transitionLabel')\n\n return (\n {\n option.analytics()\n onChange(option.name)\n }}\n isActive={isActive}\n expand={expand}\n >\n {option.logo}\n \n \n )\n}\n\ninterface LeftSideActionsProps {\n optionActiveName: ActivePanelName | null\n setActiveName: (name: ActivePanelName) => void\n}\n\nexport const LeftSideActions: React.FC = ({\n optionActiveName,\n setActiveName,\n}) => {\n const options = useLeftSideOptions()\n\n return (\n \n \n {options.map(o => {\n return (\n \n \n )\n })}\n \n \n )\n}\n","import {\n CatalogContainer,\n CatalogItem,\n CatalogItemInner,\n CatalogItemWrapper,\n Image,\n StyledLabelColor,\n CarouselWrapper,\n} from '../styles'\nimport React, { useEffect, useRef, useState } from 'react'\nimport Swiper, { SwiperInstance } from 'react-id-swiper'\nimport { SwiperOptions } from 'swiper'\nimport { debounce } from 'lodash'\nimport { Product } from '@customTypes/product'\nimport { useVM } from '@providers/VmProvider'\n\nconst TIME_TO_HIDE_TOOLTIP = 2000\n\nconst swiperParams: SwiperOptions = {\n slidesPerView: 'auto',\n spaceBetween: 5,\n centeredSlides: true,\n slideToClickedSlide: true, // see: LVM-283\n}\n\ninterface Catalog {\n items: Product[]\n selectedUpc: string\n onChange: (upc: string) => void\n}\nexport const FrameCatalog: React.FC = ({ items, selectedUpc, onChange }) => {\n const selectedIndex = items.length > 0 ? items.findIndex(el => el.upc === selectedUpc) : 0\n\n const [currentSlide, setCurrentSlide] = useState(selectedIndex || 0)\n const [isTooltipVisible, setTooltipVisibility] = useState(true)\n const swiper = useRef(null)\n const timer = useRef | null>(null)\n\n const { isReady } = useVM()\n const setSwiper = (swiperInstance: SwiperInstance) => {\n swiper.current = swiperInstance\n }\n\n const changeUpc = debounce((upc: string) => {\n onChange(upc)\n }, 800)\n\n useEffect(() => {\n if (items.length > 0 && selectedUpc !== items[currentSlide].upc) {\n changeUpc(items[currentSlide].upc)\n }\n }, [items, selectedUpc, currentSlide, changeUpc])\n\n useEffect(() => {\n if (isReady) {\n setTooltipVisibility(true)\n timer.current = setTimeout(() => {\n setTooltipVisibility(false)\n timer.current && clearTimeout(timer.current)\n timer.current = null\n }, TIME_TO_HIDE_TOOLTIP)\n\n swiper.current?.on('slideChangeTransitionEnd', () => {\n if (swiper.current) {\n setCurrentSlide(swiper.current.realIndex)\n }\n })\n }\n\n return function cleanup() {\n swiper.current?.off('click')\n swiper.current?.off('slideChangeTransitionEnd')\n }\n }, [swiper, currentSlide, isReady])\n\n const frameColorLabel = items[currentSlide]?.frameColorLabel\n const lensColorLabel = items[currentSlide]?.lensColorLabel\n\n return (\n \n \n {items.length > 0 && (\n \n {items.map(({ upc, thumbnailUrl }, index) => (\n \n \n \n \n \n \n \n ))}\n \n )}\n\n {isReady && (\n \n {frameColorLabel && {frameColorLabel}}\n {lensColorLabel && {lensColorLabel}}\n \n )}\n \n \n )\n}\n","import styled from 'styled-components'\nimport { pxToEm } from '@libs/styled'\nimport { CatalogItem, CatalogItemInner, CarouselWrapper } from '../styles'\n\nexport const StyledCatalogItemInner = styled(CatalogItemInner)`\n width: auto;\n height: auto;\n`\n\nexport const StyledCatalogItem = styled(CatalogItem)<{ isActive: boolean }>`\n margin-right: ${pxToEm(20)};\n background-color: ${({ isActive, theme }) =>\n isActive ? `${theme.palette.black}` : `${theme.palette.white[70]}`};\n width: max-content;\n color: ${({ isActive, theme }) =>\n isActive ? `${theme.palette.white[100]}` : `${theme.palette.black}`};\n border-radius: ${pxToEm(100)};\n padding: ${pxToEm(15)} ${pxToEm(25)};\n background-clip: border-box;\n text-transform: capitalize;\n border: none;\n font: ${({ theme }) => theme.fonts.paragraph};\n`\n\nexport const StyledLensDescriptionWrapper = styled.div`\n text-align: center;\n padding: ${pxToEm(10)} ${pxToEm(20)};\n margin-top: ${pxToEm(15)};\n height: ${pxToEm(110)};\n background-color: ${({ theme }) => theme.palette.white[100]};\n font: ${({ theme }) => theme.fonts.span};\n display: flex;\n align-items: center;\n\n ${({ theme }) => theme.media.medium} {\n height: ${pxToEm(117)};\n padding: ${pxToEm(25)} ${pxToEm(70)};\n }\n`\n\nexport const CarouselWrapperStyled = styled(CarouselWrapper)`\n bottom: 0;\n z-index: 2;\n`\n","import { CatalogContainer, CatalogItemWrapper } from '../styles'\nimport { FC, useCallback, useEffect, useRef, useState } from 'react'\nimport Swiper, { SwiperInstance } from 'react-id-swiper'\nimport { SwiperOptions } from 'swiper'\nimport { debounce } from 'lodash'\nimport { useTranslation } from 'react-i18next'\nimport {\n StyledCatalogItem,\n StyledCatalogItemInner,\n StyledLensDescriptionWrapper,\n CarouselWrapperStyled,\n} from './styles'\nimport { getTransitionLensLabel } from '@libs/transition'\nimport { trackClickLensCarousel } from '@libs/analytics'\nimport { useVM } from '@providers/VmProvider'\n\nconst TIME_TO_HIDE_TOOLTIP = 5000\n\nconst swiperParams: SwiperOptions = {\n slidesPerView: 'auto',\n spaceBetween: 5,\n centeredSlides: true,\n slideToClickedSlide: true, // see: LVM-283\n}\n\ninterface LensCatalogProps {\n lenses: string[]\n selectedLens: string\n onChangeLens: (lens: string) => void\n}\n\n// description field from translations\nconst LENSES_MAP = [\n { type: 'SIGNATURE', description: 'signature-gen8-description' },\n { type: 'XTRACTIVE', description: 'xtractive-description' },\n { type: 'VANTAGE', description: 'xtractive-polarized-description' },\n]\n\nconst formatTranslationsByMap = (\n obj: Record,\n map = LENSES_MAP\n): { type: string; description: string }[] => {\n return map.map(el => ({\n ...el,\n description: obj[el.description],\n }))\n}\n\nexport const LensCatalog: FC = ({ lenses, selectedLens, onChangeLens }) => {\n const { t } = useTranslation()\n\n const lensTypes = formatTranslationsByMap(t('transitions', { returnObjects: true }))\n\n const selectedIndex = lenses.findIndex(el => el === selectedLens)\n const selectedLensType = lensTypes.find(l => l.type.toLowerCase() === selectedLens.toLowerCase())\n const selectedLensDescription = selectedLensType?.description\n\n const [currentSlide, setCurrentSlide] = useState(selectedIndex !== -1 ? selectedIndex : 0)\n const [isTooltipVisible, setTooltipVisibility] = useState(true)\n const [isLensesReady, setIsLensesReady] = useState(false)\n\n const swiper = useRef(null)\n\n const { isReady } = useVM()\n\n const setSwiper = (swiperInstance: SwiperInstance) => {\n swiper.current = swiperInstance\n }\n\n const onLensChange = debounce((color: string) => {\n trackClickLensCarousel()\n onChangeLens(color)\n }, 800)\n\n const handleClick = useCallback(\n (lens: string) => {\n if (lens === lenses[currentSlide]) {\n setTooltipVisibility(c => !c)\n }\n },\n [lenses, currentSlide]\n )\n\n useEffect(() => {\n if (selectedLens !== lenses[currentSlide] && !!lenses[currentSlide]) {\n onLensChange(lenses[currentSlide])\n setTooltipVisibility(true)\n }\n }, [lenses, selectedLens, currentSlide, onLensChange])\n\n useEffect(() => {\n if (isLensesReady) {\n swiper.current?.on('slideChange', () => {\n if (swiper.current) {\n const realIndex = swiper.current.realIndex\n setCurrentSlide(realIndex)\n }\n })\n }\n\n return function cleanup() {\n swiper.current?.off('slideChange')\n }\n }, [swiper, lenses, isLensesReady])\n\n useEffect(() => {\n if (isTooltipVisible) {\n const timer = setTimeout(() => {\n setTooltipVisibility(false)\n }, TIME_TO_HIDE_TOOLTIP)\n return () => clearTimeout(timer)\n }\n }, [isTooltipVisible])\n\n useEffect(() => {\n if (!!lenses.length) {\n // since we lazy load the Transitions Lens\n // we need to update the carousel after fetching the Transitions Colors from the server\n swiper.current?.update()\n }\n }, [lenses])\n\n useEffect(() => {\n if (isReady && !!lenses.length) {\n setIsLensesReady(true)\n } else setIsLensesReady(false)\n }, [isReady, lenses])\n\n return (\n \n \n \n {lenses.map((lens, index) => (\n handleClick(lens)}\n className=\"vm__lens-catalog-wrapper\"\n >\n \n \n {getTransitionLensLabel(lens)}\n \n \n \n ))}\n \n {selectedLensDescription && (\n {selectedLensDescription}\n )}\n \n \n )\n}\n","import React from 'react'\nimport { FrameCatalog } from '@components/Carousel/FrameCatalog'\nimport { ColorsCatalog } from '@components/Carousel/ColorsCatalog'\nimport { LensCatalog } from '@components/Carousel/LensCatalog'\nimport { ActivePanelName } from '@customTypes/transition'\nimport { useVM } from '@providers/VmProvider'\nimport { Product } from '@customTypes/product'\n\ninterface CarouselProps {\n products: Product[]\n activeName: ActivePanelName | null\n}\n\nexport const Carousel: React.FC = ({ products, activeName }) => {\n const {\n currentProduct,\n currentColor,\n lensCatalog,\n currentLens = '',\n colorsCatalog,\n changeUpc,\n changeLens,\n setCurrentColor,\n } = useVM()\n\n const selectedUpc = currentProduct?.upc || ''\n\n const renderItems = () => {\n switch (activeName) {\n case 'lens':\n return (\n \n )\n case 'color':\n return (\n \n )\n case 'frame':\n return (\n \n )\n default:\n return null\n }\n }\n\n return <>{renderItems()}\n}\n","import lookup from 'void-elements'\nconst attrRE = /\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g\n\nexport default function stringify(tag) {\n const res = {\n type: 'tag',\n name: '',\n voidElement: false,\n attrs: {},\n children: [],\n }\n\n const tagMatch = tag.match(/<\\/?([^\\s]+?)[/\\s>]/)\n if (tagMatch) {\n res.name = tagMatch[1]\n if (\n lookup[tagMatch[1]] ||\n tag.charAt(tag.length - 2) === '/'\n ) {\n res.voidElement = true\n }\n\n // handle comment tag\n if (res.name.startsWith('!--')) {\n const endIndex = tag.indexOf('-->')\n return {\n type: 'comment',\n comment: endIndex !== -1 ? tag.slice(4, endIndex) : '',\n }\n }\n }\n\n const reg = new RegExp(attrRE)\n let result = null\n for (;;) {\n result = reg.exec(tag)\n\n if (result === null) {\n break\n }\n\n if (!result[0].trim()) {\n continue\n }\n\n if (result[1]) {\n const attr = result[1].trim()\n let arr = [attr, '']\n\n if (attr.indexOf('=') > -1) {\n arr = attr.split('=')\n }\n\n res.attrs[arr[0]] = arr[1]\n reg.lastIndex--\n } else if (result[2]) {\n res.attrs[result[2]] = result[3].trim().substring(1, result[3].length - 1)\n }\n }\n\n return res\n}\n","import parseTag from './parse-tag'\n\nconst tagRE = /<[a-zA-Z0-9\\-\\!\\/](?:\"[^\"]*\"|'[^']*'|[^'\">])*>/g\nconst whitespaceRE = /^\\s*$/\n\n// re-used obj for quick lookups of components\nconst empty = Object.create(null)\n\nexport default function parse(html, options) {\n options || (options = {})\n options.components || (options.components = empty)\n const result = []\n const arr = []\n let current\n let level = -1\n let inComponent = false\n\n // handle text at top level\n if (html.indexOf('<') !== 0) {\n var end = html.indexOf('<')\n result.push({\n type: 'text',\n content: end === -1 ? html : html.substring(0, end),\n })\n }\n\n html.replace(tagRE, function (tag, index) {\n if (inComponent) {\n if (tag !== '') {\n return\n } else {\n inComponent = false\n }\n }\n const isOpen = tag.charAt(1) !== '/'\n const isComment = tag.startsWith(''\n return buff\n }\n}\n\nexport default function (doc) {\n return doc.reduce(function (token, rootEl) {\n return token + stringify('', rootEl)\n }, '')\n}\n","import parse from './parse'\nimport stringify from './stringify'\n\nexport default {\n parse,\n stringify,\n}\n","/**\n * Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar replace = ''.replace;\n\nvar ca = /[&<>'\"]/g;\nvar es = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;\n\nvar esca = {\n '&': '&',\n '<': '<',\n '>': '>',\n \"'\": ''',\n '\"': '"'\n};\nvar unes = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"'\n};\n\nexport function escape(es) {\n return replace.call(es, ca, pe);\n};\n\nexport function unescape(un) {\n return replace.call(un, es, cape);\n};\n\nfunction pe(m) {\n return esca[m];\n}\n\nfunction cape(m) {\n return unes[m];\n}\n","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nvar _excluded = [\"format\"],\n _excluded2 = [\"children\", \"count\", \"parent\", \"i18nKey\", \"context\", \"tOptions\", \"values\", \"defaults\", \"components\", \"ns\", \"i18n\", \"t\", \"shouldUnescape\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport React, { useContext } from 'react';\nimport HTML from 'html-parse-stringify';\nimport { unescape } from 'html-escaper';\nimport { getI18n, I18nContext, getDefaults } from './context';\nimport { warn, warnOnce } from './utils';\n\nfunction hasChildren(node, checkLength) {\n if (!node) return false;\n var base = node.props ? node.props.children : node.children;\n if (checkLength) return base.length > 0;\n return !!base;\n}\n\nfunction getChildren(node) {\n if (!node) return [];\n return node && node.children ? node.children : node.props && node.props.children;\n}\n\nfunction hasValidReactChildren(children) {\n if (Object.prototype.toString.call(children) !== '[object Array]') return false;\n return children.every(function (child) {\n return React.isValidElement(child);\n });\n}\n\nfunction getAsArray(data) {\n return Array.isArray(data) ? data : [data];\n}\n\nfunction mergeProps(source, target) {\n var newTarget = _objectSpread({}, target);\n\n newTarget.props = Object.assign(source.props, target.props);\n return newTarget;\n}\n\nexport function nodesToString(children, i18nOptions) {\n if (!children) return '';\n var stringNode = '';\n var childrenArray = getAsArray(children);\n var keepArray = i18nOptions.transSupportBasicHtmlNodes && i18nOptions.transKeepBasicHtmlNodesFor ? i18nOptions.transKeepBasicHtmlNodesFor : [];\n childrenArray.forEach(function (child, childIndex) {\n if (typeof child === 'string') {\n stringNode += \"\".concat(child);\n } else if (React.isValidElement(child)) {\n var childPropsCount = Object.keys(child.props).length;\n var shouldKeepChild = keepArray.indexOf(child.type) > -1;\n var childChildren = child.props.children;\n\n if (!childChildren && shouldKeepChild && childPropsCount === 0) {\n stringNode += \"<\".concat(child.type, \"/>\");\n } else if (!childChildren && (!shouldKeepChild || childPropsCount !== 0)) {\n stringNode += \"<\".concat(childIndex, \">\");\n } else if (child.props.i18nIsDynamicList) {\n stringNode += \"<\".concat(childIndex, \">\");\n } else if (shouldKeepChild && childPropsCount === 1 && typeof childChildren === 'string') {\n stringNode += \"<\".concat(child.type, \">\").concat(childChildren, \"\");\n } else {\n var content = nodesToString(childChildren, i18nOptions);\n stringNode += \"<\".concat(childIndex, \">\").concat(content, \"\");\n }\n } else if (child === null) {\n warn(\"Trans: the passed in value is invalid - seems you passed in a null child.\");\n } else if (_typeof(child) === 'object') {\n var format = child.format,\n clone = _objectWithoutProperties(child, _excluded);\n\n var keys = Object.keys(clone);\n\n if (keys.length === 1) {\n var value = format ? \"\".concat(keys[0], \", \").concat(format) : keys[0];\n stringNode += \"{{\".concat(value, \"}}\");\n } else {\n warn(\"react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.\", child);\n }\n } else {\n warn(\"Trans: the passed in value is invalid - seems you passed in a variable like {number} - please pass in variables for interpolation as full objects like {{number}}.\", child);\n }\n });\n return stringNode;\n}\n\nfunction renderNodes(children, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) {\n if (targetString === '') return [];\n var keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n var emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.join('|')).test(targetString);\n if (!children && !emptyChildrenButNeedsHandling) return [targetString];\n var data = {};\n\n function getData(childs) {\n var childrenArray = getAsArray(childs);\n childrenArray.forEach(function (child) {\n if (typeof child === 'string') return;\n if (hasChildren(child)) getData(getChildren(child));else if (_typeof(child) === 'object' && !React.isValidElement(child)) Object.assign(data, child);\n });\n }\n\n getData(children);\n var ast = HTML.parse(\"<0>\".concat(targetString, \"\"));\n\n var opts = _objectSpread(_objectSpread({}, data), combinedTOpts);\n\n function renderInner(child, node, rootReactNode) {\n var childs = getChildren(child);\n var mappedChildren = mapAST(childs, node.children, rootReactNode);\n return hasValidReactChildren(childs) && mappedChildren.length === 0 ? childs : mappedChildren;\n }\n\n function pushTranslatedJSX(child, inner, mem, i, isVoid) {\n if (child.dummy) child.children = inner;\n mem.push(React.cloneElement(child, _objectSpread(_objectSpread({}, child.props), {}, {\n key: i\n }), isVoid ? undefined : inner));\n }\n\n function mapAST(reactNode, astNode, rootReactNode) {\n var reactNodes = getAsArray(reactNode);\n var astNodes = getAsArray(astNode);\n return astNodes.reduce(function (mem, node, i) {\n var translationContent = node.children && node.children[0] && node.children[0].content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);\n\n if (node.type === 'tag') {\n var tmp = reactNodes[parseInt(node.name, 10)];\n if (!tmp && rootReactNode.length === 1 && rootReactNode[0][node.name]) tmp = rootReactNode[0][node.name];\n if (!tmp) tmp = {};\n var child = Object.keys(node.attrs).length !== 0 ? mergeProps({\n props: node.attrs\n }, tmp) : tmp;\n var isElement = React.isValidElement(child);\n var isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;\n var isEmptyTransWithHTML = emptyChildrenButNeedsHandling && _typeof(child) === 'object' && child.dummy && !isElement;\n var isKnownComponent = _typeof(children) === 'object' && children !== null && Object.hasOwnProperty.call(children, node.name);\n\n if (typeof child === 'string') {\n var value = i18n.services.interpolator.interpolate(child, opts, i18n.language);\n mem.push(value);\n } else if (hasChildren(child) || isValidTranslationWithChildren) {\n var inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (isEmptyTransWithHTML) {\n var _inner = mapAST(reactNodes, node.children, rootReactNode);\n\n mem.push(React.cloneElement(child, _objectSpread(_objectSpread({}, child.props), {}, {\n key: i\n }), _inner));\n } else if (Number.isNaN(parseFloat(node.name))) {\n if (isKnownComponent) {\n var _inner2 = renderInner(child, node, rootReactNode);\n\n pushTranslatedJSX(child, _inner2, mem, i, node.voidElement);\n } else if (i18nOptions.transSupportBasicHtmlNodes && keepArray.indexOf(node.name) > -1) {\n if (node.voidElement) {\n mem.push(React.createElement(node.name, {\n key: \"\".concat(node.name, \"-\").concat(i)\n }));\n } else {\n var _inner3 = mapAST(reactNodes, node.children, rootReactNode);\n\n mem.push(React.createElement(node.name, {\n key: \"\".concat(node.name, \"-\").concat(i)\n }, _inner3));\n }\n } else if (node.voidElement) {\n mem.push(\"<\".concat(node.name, \" />\"));\n } else {\n var _inner4 = mapAST(reactNodes, node.children, rootReactNode);\n\n mem.push(\"<\".concat(node.name, \">\").concat(_inner4, \"\"));\n }\n } else if (_typeof(child) === 'object' && !isElement) {\n var content = node.children[0] ? translationContent : null;\n if (content) mem.push(content);\n } else if (node.children.length === 1 && translationContent) {\n mem.push(React.cloneElement(child, _objectSpread(_objectSpread({}, child.props), {}, {\n key: i\n }), translationContent));\n } else {\n mem.push(React.cloneElement(child, _objectSpread(_objectSpread({}, child.props), {}, {\n key: i\n })));\n }\n } else if (node.type === 'text') {\n var wrapTextNodes = i18nOptions.transWrapTextNodes;\n\n var _content = shouldUnescape ? unescape(i18n.services.interpolator.interpolate(node.content, opts, i18n.language)) : i18n.services.interpolator.interpolate(node.content, opts, i18n.language);\n\n if (wrapTextNodes) {\n mem.push(React.createElement(wrapTextNodes, {\n key: \"\".concat(node.name, \"-\").concat(i)\n }, _content));\n } else {\n mem.push(_content);\n }\n }\n\n return mem;\n }, []);\n }\n\n var result = mapAST([{\n dummy: true,\n children: children || []\n }], ast, getAsArray(children || []));\n return getChildren(result[0]);\n}\n\nexport function Trans(_ref) {\n var children = _ref.children,\n count = _ref.count,\n parent = _ref.parent,\n i18nKey = _ref.i18nKey,\n context = _ref.context,\n _ref$tOptions = _ref.tOptions,\n tOptions = _ref$tOptions === void 0 ? {} : _ref$tOptions,\n values = _ref.values,\n defaults = _ref.defaults,\n components = _ref.components,\n ns = _ref.ns,\n i18nFromProps = _ref.i18n,\n tFromProps = _ref.t,\n shouldUnescape = _ref.shouldUnescape,\n additionalProps = _objectWithoutProperties(_ref, _excluded2);\n\n var _ref2 = useContext(I18nContext) || {},\n i18nFromContext = _ref2.i18n,\n defaultNSFromContext = _ref2.defaultNS;\n\n var i18n = i18nFromProps || i18nFromContext || getI18n();\n\n if (!i18n) {\n warnOnce('You will need to pass in an i18next instance by using i18nextReactModule');\n return children;\n }\n\n var t = tFromProps || i18n.t.bind(i18n) || function (k) {\n return k;\n };\n\n if (context) tOptions.context = context;\n\n var reactI18nextOptions = _objectSpread(_objectSpread({}, getDefaults()), i18n.options && i18n.options.react);\n\n var namespaces = ns || t.ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];\n var defaultValue = defaults || nodesToString(children, reactI18nextOptions) || reactI18nextOptions.transEmptyNodeValue || i18nKey;\n var hashTransKey = reactI18nextOptions.hashTransKey;\n var key = i18nKey || (hashTransKey ? hashTransKey(defaultValue) : defaultValue);\n var interpolationOverride = values ? tOptions.interpolation : {\n interpolation: _objectSpread(_objectSpread({}, tOptions.interpolation), {}, {\n prefix: '#$?',\n suffix: '?$#'\n })\n };\n\n var combinedTOpts = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, tOptions), {}, {\n count: count\n }, values), interpolationOverride), {}, {\n defaultValue: defaultValue,\n ns: namespaces\n });\n\n var translation = key ? t(key, combinedTOpts) : defaultValue;\n var content = renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);\n var useAsParent = parent !== undefined ? parent : reactI18nextOptions.defaultTransParent;\n return useAsParent ? React.createElement(useAsParent, additionalProps, content) : content;\n}","import { resetButtonStyles } from '@components/Menu/styles'\nimport { pxToEm } from '@libs/styled'\nimport styled, { css } from 'styled-components'\n\nexport const ToggleBtn = styled.button<{ expand?: boolean }>`\n position: absolute;\n top: ${pxToEm(30)};\n width: ${({ expand }) => (expand ? 'auto' : pxToEm(32))};\n height: ${pxToEm(32)};\n border-radius: ${pxToEm(32)};\n z-index: 1;\n transition: width 0.5s ease;\n box-sizing: content-box;\n ${({ theme }) => theme.media.medium} {\n top: ${pxToEm(41)};\n }\n ${resetButtonStyles}\n cursor: pointer;\n`\nexport const IconWrapper = styled.div`\n position: absolute;\n width: ${pxToEm(20)};\n height: ${pxToEm(20)};\n top: -${pxToEm(10)};\n right: -${pxToEm(5)};\n border-radius: 50%;\n display: flex;\n line-height: 0;\n justify-content: center;\n align-items: center;\n backdrop-filter: blur(${pxToEm(50)});\n border: solid 1px ${({ theme }) => theme.palette.white[70]};\n cursor: pointer;\n background-image: linear-gradient(\n 153deg,\n ${({ theme }) => theme.palette.white[70]} 26%,\n ${({ theme }) => theme.palette.white[40]} 97%\n );\n`\n\nexport const TransitionIconWrapper = styled.div<{ withText?: boolean }>`\n width: ${pxToEm(40)};\n height: ${pxToEm(40)};\n border-radius: ${pxToEm(20)};\n backdrop-filter: blur(4px);\n background-color: rgba(0, 0, 0, 0.65);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n ${({ withText }) =>\n withText &&\n css`\n width: auto;\n color: white;\n font-size: ${pxToEm(12)};\n justify-content: flex-start;\n padding-left: ${pxToEm(20)};\n padding-right: ${pxToEm(20)};\n font: ${({ theme }) => theme.fonts.span};\n white-space: nowrap;\n `}\n`\n","import {\n CloseIcon,\n TransitionIconReduced,\n TransitionsIcon,\n // TryTransitionIcon,\n // TryTransitionMobileIcon,\n} from '@components/core/Icons'\nimport { useAnimation } from '@hooks/useAnimationApp'\nimport { trackClickTransitionView } from '@libs/analytics'\n// import { isMobileView } from '@libs/utils'\nimport { useCallback, useState } from 'react'\nimport { Trans } from 'react-i18next'\nimport { IconWrapper, ToggleBtn, TransitionIconWrapper } from './styles'\ninterface ToggleProps {\n changeMenuVisibility: () => void\n isTransitionActive: boolean\n}\n\nexport const Toggle: React.FC = ({ changeMenuVisibility, isTransitionActive }) => {\n const [expand, setExpand] = useState(false)\n const cbOnStart = useCallback(() => {\n setExpand(true)\n }, [])\n\n const cbOnEnd = useCallback(() => {\n setExpand(false)\n }, [])\n\n // const { t } = useTranslation()\n\n useAnimation(true, !expand, cbOnStart, cbOnEnd, 'transitionBtn')\n\n const onToggle = useCallback(() => {\n if (!isTransitionActive) {\n trackClickTransitionView()\n }\n changeMenuVisibility()\n }, [isTransitionActive, changeMenuVisibility])\n\n // const TryTransirionIcon = isMobileView() ? TryTransitionMobileIcon : TryTransitionIcon\n\n return (\n \n {expand ? (\n \n {/* {t('general.try-with')} \n */}\n ]}\n />\n \n ) : (\n \n \n \n )}\n {isTransitionActive && (\n \n \n \n )}\n \n )\n}\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const CtaContainer = styled.div`\n position: absolute;\n top: ${pxToEm(70)};\n left: ${pxToEm(10)};\n bottom: ${pxToEm(110)};\n z-index: 1;\n\n ${({ theme }) => theme.media.medium} {\n left: ${pxToEm(23)};\n }\n`\n","import { LeftSideActions } from '@components/LeftSideActions'\nimport { OverlayWrapper } from '@components/core/Overlay'\nimport { ActivePanelName } from '@customTypes/transition'\nimport { useAnimationApp } from '@hooks/useAnimationApp'\nimport { useConfig } from '@providers/configProvider'\nimport { setTransitionViewCarousel } from '@store/actions/ui'\nimport { AppState } from '@store/index'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Carousel } from '../Carousel'\nimport { Toggle } from './Toggle'\nimport { useVM } from '@providers/VmProvider'\nimport { CtaContainer } from './styles'\n\ninterface TransitionViewProps {\n children?: React.ReactNode\n}\n\nexport const TransitionView: React.FC = ({ children }) => {\n const dispatch = useDispatch()\n const { activeName, isMenuVisible } = useSelector((s: AppState) => s.ui)\n const {\n isReady,\n vmProducts: products,\n currentProduct: selectedProduct,\n isTransitionActive,\n toggleTransitionActive,\n } = useVM()\n\n const selectedUpc = selectedProduct?.upc\n const isTransition = selectedProduct?.isTransition || false\n\n const setActiveName = useCallback(\n (activeName: ActivePanelName) => {\n dispatch(setTransitionViewCarousel(activeName))\n },\n [dispatch]\n )\n\n const { isComplete } = useAnimationApp()\n const { transitionFeature } = useConfig()\n\n const currentProduct = products.find(p => p.upc === selectedUpc)\n const isEvolve = currentProduct?.transitionLens?.isEvolve || false\n\n useEffect(() => {\n if (isComplete && isTransition) {\n setActiveName(transitionFeature?.activePanel || 'lens')\n }\n }, [isComplete, isTransition, transitionFeature?.activePanel, setActiveName])\n\n useEffect(() => {\n if (!isTransition) {\n setActiveName('frame')\n }\n }, [isTransition, setActiveName])\n\n useEffect(() => {\n if (isEvolve && isTransitionActive) {\n toggleTransitionActive()\n }\n }, [isEvolve, isTransitionActive, toggleTransitionActive])\n\n const transitionProducts = products.filter(p => p.isTransition && !p.transitionLens?.isEvolve)\n\n const showTransitionToggler = useMemo(() => {\n return isTransition && transitionFeature?.enabled && !isEvolve && !isMenuVisible\n }, [isTransition, isEvolve, isMenuVisible, transitionFeature])\n\n return (\n <>\n {isReady && (\n \n {showTransitionToggler && (\n \n )}\n {isTransitionActive && !isMenuVisible && (\n \n )}\n \n )}\n\n {isTransitionActive && }\n {!isTransitionActive && }\n {isTransitionActive && isReady && }\n {children}\n \n )\n}\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const QRCodeWrapper = styled.div`\n z-index: 20;\n position: absolute;\n width: 100%;\n top: 0;\n left: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n`\n\nexport const QRCodeModalContent = styled.div`\n z-index: 1;\n position: absolute;\n width: 70%;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: ${({ theme }) => theme.palette.white[100]};\n padding: 0 ${pxToEm(24)};\n`\n\nexport const CloseBtn = styled.div`\n position: absolute;\n right: 0;\n padding: ${pxToEm(30)};\n svg {\n cursor: pointer;\n }\n`\n\nexport const QRCodeModalTitle = styled.div`\n font: ${({ theme }) => theme.fonts.qrCodeTitle};\n margin-top: ${pxToEm(88)};\n padding: 0 ${pxToEm(80)};\n text-align: center;\n`\n\nexport const ProductName = styled.div`\n text-align: center;\n margin: ${pxToEm(24)} 0 ${pxToEm(40)};\n font: ${({ theme }) => theme.fonts.paragraph};\n`\n\nexport const QRCode = styled.div`\n width: ${pxToEm(160)};\n height: ${pxToEm(160)};\n background: ${({ theme }) => theme.palette.black};\n margin: 0 auto ${pxToEm(60)};\n`\n\nexport const Instructions = styled.div`\n margin: ${pxToEm(50)} auto 0;\n margin-bottom: ${pxToEm(30)};\n padding: 0 ${pxToEm(24)};\n display: flex;\n`\n\nexport const InstructionStep = styled.div`\n padding: ${pxToEm(16)} ${pxToEm(24)};\n width: 50%;\n display: flex;\n\n &:first-child {\n border-right: 1px solid ${({ theme }) => theme.palette.silver};\n }\n`\n\nexport const InstructionStepNumber = styled.div`\n margin-right: ${pxToEm(8)};\n min-width: ${pxToEm(16)};\n width: ${pxToEm(16)};\n height: ${pxToEm(16)};\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${({ theme }) => theme.palette.white[100]};\n background-color: ${({ theme }) => theme.palette.black};\n font: ${({ theme }) => theme.fonts.span};\n`\n\nexport const FittingRoom = styled.div`\n padding: ${pxToEm(24)} ${pxToEm(80)};\n display: flex;\n justify-content: center;\n align-items: center;\n border-top: 1px solid ${({ theme }) => theme.palette.silver};\n\n svg {\n margin-right: ${pxToEm(24)};\n }\n`\n\nexport const Text = styled.div`\n font: ${({ theme }) => theme.fonts.span};\n`\n","import { CloseIcon } from '@components/core/Icons'\nimport { AppState } from '@store/index'\nimport { setQRCodeModalVisibility } from '@store/actions/ui'\nimport { useTranslation } from 'react-i18next'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { QRCode } from './QRCode'\nimport {\n QRCodeModalContent,\n CloseBtn,\n QRCodeModalTitle,\n ProductName,\n Instructions,\n InstructionStep,\n InstructionStepNumber,\n Text,\n QRCodeWrapper,\n} from './styles'\n\ninterface QRCodeModalProps {\n productName: string\n}\n\nexport const QRCodeModal: React.FC = ({ productName }) => {\n const { t } = useTranslation()\n const dispatch = useDispatch()\n const isOpen = useSelector((s: AppState) => s.ui.isQRCodeModalVisible)\n\n if (!isOpen) {\n return null\n }\n\n return (\n \n \n dispatch(setQRCodeModalVisibility(false))}>\n \n \n {t('tablet-store-qrcode-reader.scan-the-code')}\n {productName}\n \n \n \n 1\n {t('tablet-store-qrcode-reader.take-your-phone')}\n \n \n 2\n {t('tablet-store-qrcode-reader.enjoy-and-download')}\n \n \n \n \n )\n}\n","import styled from 'styled-components'\nimport { pxToEm } from '@libs/styled'\nimport { Button } from '@components/core/Button'\nimport { resetButtonStyles } from '@components/Menu/styles'\n\nexport const ModalWindowContainer = styled.div`\n z-index: 1001;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n margin: auto;\n display: flex;\n align-items: flex-start;\n background-color: ${({ theme }) => theme.palette.white[100]};\n border-radius: ${pxToEm(16)};\n width: ${pxToEm(322)};\n height: ${pxToEm(370)};\n padding: 0 ${pxToEm(16)};\n\n ${({ theme }) => theme.media.medium} {\n border-radius: ${pxToEm(16)};\n width: ${pxToEm(545)};\n }\n\n ${({ theme }) => theme.media.large} {\n border-radius: 0;\n width: 100%;\n height: 100%;\n }\n`\n\nexport const ModalCloseButton = styled.button`\n ${resetButtonStyles};\n position: absolute;\n right: ${pxToEm(11)};\n top: ${pxToEm(11)};\n svg {\n cursor: pointer;\n }\n`\n\nexport const ModalContainer = styled.div`\n max-width: ${pxToEm(290)};\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n padding: ${pxToEm(56)} 0 ${pxToEm(24)} 0;\n height: 100%;\n margin: 0 auto;\n\n ${({ theme }) => theme.media.medium} {\n padding: ${pxToEm(47)} 0 ${pxToEm(32)} 0;\n }\n ${({ theme }) => theme.media.large} {\n height: unset;\n padding: ${pxToEm(88)} 0 0 0;\n }\n`\n\nexport const TitleContainer = styled.div`\n text-align: center;\n\n ${({ theme }) => theme.media.large} {\n margin-bottom: ${pxToEm(80)};\n }\n`\nexport const Title = styled.div`\n margin-bottom: ${pxToEm(24)};\n font-weight: 600;\n h2 {\n font: ${({ theme }) => theme.fonts.titleSmall};\n }\n`\n\nexport const Text = styled.span`\n font: ${({ theme }) => theme.fonts.paragraph};\n line-height: 1.25;\n`\n\nexport const AddPrescriptionLensesButton = styled(Button)`\n font: ${({ theme }) => theme.fonts.paragraph};\n font-size: ${pxToEm(14)};\n background: var(--vm-components-rx-cta-bg);\n color: var(--vm-components-rx-cta-text)};\n border-color: var(--vm-components-rx-cta-text)};\n padding: 0;\n width: 100%;\n margin: 0 0 ${pxToEm(16)} 0;\n height: 48px;\n`\nexport const AddToCartButton = styled(Button)`\n font: ${({ theme }) => theme.fonts.buttonTextLink};\n font-size: ${pxToEm(14)};\n background: var(--vm-components-add-to-cart-cta-bg)};\n color: var(--vm-components-add-to-cart-cta-text)};\n border-color: var(--vm-components-add-to-cart-cta-text)};\n padding: 0;\n width: 100%;\n margin: 0;\n height: 48px;\n`\nexport const ButtonsContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: ${pxToEm(242)};\n`\n","import { CloseScreenshotIcon } from '@components/core/Icons'\nimport React, { useCallback } from 'react'\nimport { Modal } from '@components/core/Modal'\nimport {\n ModalCloseButton,\n ModalWindowContainer,\n AddPrescriptionLensesButton,\n AddToCartButton,\n ButtonsContainer,\n ModalContainer,\n Text,\n Title,\n TitleContainer,\n} from './styles'\nimport { useModal } from '@hooks/useModal'\nimport { useTranslation } from 'react-i18next'\nimport { useConfig } from '@providers/configProvider'\nimport { Product } from '@customTypes/product'\nimport { useAddToCart } from '@hooks/useAddToCart'\nimport { useAlternativePath } from '@hooks/useAlternativePath'\n\ninterface AddPrescriptionModalProps {\n product: Product\n}\n\nexport const AddPrescriptionModal: React.FC = ({ product }) => {\n const { onAddPrescriptionLenses, addToCartText } = useConfig()\n\n const { addToCart } = useAddToCart({ product })\n const { isModalVisible, toggleModalVisibility } = useModal()\n const { t } = useTranslation()\n\n const { alternativeDecision } = useAlternativePath(product)\n\n const { alternativeTitle, alternativeText, alternativeCtaTxt, alternativeBtn } =\n alternativeDecision || {}\n\n const handleAddPrescriptionLenses = useCallback(() => {\n if (!!alternativeBtn) alternativeBtn(product)\n else onAddPrescriptionLenses && onAddPrescriptionLenses(product)\n }, [alternativeBtn, onAddPrescriptionLenses, product])\n\n const handleAddToCart = useCallback(() => {\n addToCart && addToCart()\n }, [addToCart])\n\n return (\n \n \n \n \n \n \n \n \n <h2 className={'vmmv-add-prescription-modal-title'}>\n {alternativeTitle || t('live-try-on-ecommerce.choose-your-need')}\n </h2>\n \n \n {alternativeText || t('live-try-on-ecommerce.choose-your-prescription-lenses')}\n \n \n \n \n {alternativeCtaTxt || t('live-try-on-ecommerce.add-prescription-lenses')}\n \n \n {addToCartText || t('general.add-to-cart')}\n \n \n \n \n \n )\n}\n","import { useDispatch } from 'react-redux'\nimport { useConfig } from '@providers/configProvider'\nimport { VMProvider } from '@providers/VmProvider'\n\nimport { Menu } from '@components/Menu'\nimport { RightSideActions } from '@components/RightSIdeActions'\nimport { TransitionView } from '@components/TransitionView'\nimport { FooterActions } from '@components/FooterActions'\nimport { Drawer } from '@components/core/Drawer'\nimport { ScreenshotPreview } from '@components/ScreenshotPreview'\nimport { QRCodeModal } from '@components/QRCodeModal'\nimport { setQRCodeModalVisibility } from '@store/actions/ui'\nimport { AddPrescriptionModal } from '@components/AddPrescriptionModal'\nimport { ErrorModal } from '@components/ErrorModal'\nimport { InitColorSwatches } from '@components/InitColorSwatches'\nimport { useTranslation } from 'react-i18next'\n\nconst LiveTryOn: React.FC = () => {\n const config = useConfig()\n const { fromStore } = config\n const dispatch = useDispatch()\n\n const { t } = useTranslation()\n\n return (\n \n {({\n isReady,\n isVMInitialized,\n isTransitionActive,\n currentProduct,\n isNoUpc,\n isEvolveProduct,\n setColors,\n }) => (\n <>\n {currentProduct && (\n <>\n {isVMInitialized && }\n {isReady && (\n dispatch(setQRCodeModalVisibility(true))}\n />\n )}\n \n {(isTransitionActive || isEvolveProduct) && (\n \n )}\n \n \n\n \n \n \n\n \n \n \n )}\n \n \n )}\n \n )\n}\n\nexport default LiveTryOn\n","import { useDispatch } from 'react-redux'\nimport { useConfig } from '@providers/configProvider'\n\nimport { PictureModeProvider } from '@providers/VtoProvider'\nimport { setQRCodeModalVisibility } from '@store/actions/ui'\n\nimport { Menu } from '@components/Menu'\nimport { FooterActions } from '@components/FooterActions'\nimport { TransitionView } from '@components/TransitionView'\nimport { RightSideActions } from '@components/RightSIdeActions'\nimport { QRCodeModal } from '@components/QRCodeModal'\nimport { ScreenshotPreview } from '@components/ScreenshotPreview'\nimport { Drawer } from '@components/core/Drawer'\nimport { AddPrescriptionModal } from '@components/AddPrescriptionModal'\nimport { ErrorModal } from '@components/ErrorModal'\nimport { useTranslation } from 'react-i18next'\n\nexport const PictureModeView = () => {\n const { fromStore } = useConfig()\n const dispatch = useDispatch()\n\n const { t } = useTranslation()\n\n return (\n \n {({ isReady, isTransitionActive, currentProduct, isNoUpc, onRefresh }) => (\n <>\n {currentProduct && (\n <>\n \n {isReady && (\n dispatch(setQRCodeModalVisibility(true))}\n />\n )}\n\n \n \n\n \n \n \n\n \n \n \n )}\n \n \n )}\n \n )\n}\n","import { useDispatch } from 'react-redux'\nimport { useConfig } from '@providers/configProvider'\n\nimport { VideoModeProvider } from '@providers/VtoProvider'\nimport { setQRCodeModalVisibility } from '@store/actions/ui'\n\nimport { FooterActions } from '@components/FooterActions'\nimport { Menu } from '@components/Menu'\nimport { RightSideActions } from '@components/RightSIdeActions'\nimport { TransitionView } from '@components/TransitionView'\nimport { QRCodeModal } from '@components/QRCodeModal'\nimport { Drawer } from '@components/core/Drawer'\nimport { ScreenshotPreview } from '@components/ScreenshotPreview'\nimport { AddPrescriptionModal } from '@components/AddPrescriptionModal'\nimport { ErrorModal } from '@components/ErrorModal'\nimport { useTranslation } from 'react-i18next'\n\nexport const VideoModeView = () => {\n const { fromStore } = useConfig()\n const dispatch = useDispatch()\n\n const { t } = useTranslation()\n\n return (\n \n {({ isReady, isTransitionActive, currentProduct, isNoUpc, onRefresh }) => (\n <>\n {currentProduct && (\n <>\n \n {isReady && (\n dispatch(setQRCodeModalVisibility(true))}\n />\n )}\n \n \n\n \n \n \n\n \n \n \n )}\n \n \n )}\n \n )\n}\n","import React from 'react'\nimport { MemoryRouter, Route, Routes } from 'react-router'\nimport LiveTryOn from '@pages/LiveTryOn'\nimport PictureMode from '@pages/PictureMode'\nimport VideoMode from '@pages/VideoMode'\nimport PrivacyPolicyPage from '@pages/PrivacyPolicy'\nimport {\n liveTryOn,\n pictureMode,\n videoMode,\n uploadInstructions,\n pictureModeView,\n takePicture,\n videoModeView,\n privacyPolicy,\n availableMode,\n videoScan,\n pictureVideoModeError,\n takePictureInstructions,\n} from '@utils/routes'\nimport { UploadInstructions } from '@components/PictureMode/UploadPicture'\nimport { PictureModeEntryPage } from '@components/PictureMode'\nimport { TakePicture } from '@components/PictureMode/TakePicture'\nimport { PictureModeView } from '@components/PictureMode/PictureModeView'\nimport { VideoModeView } from '@components/VideoMode/VideoModeView'\nimport { VideoFaceScan } from '@components/VideoMode/VideoFaceScan'\nimport { AvailableMode } from '@components/AvailableMode'\nimport ProtectedRoute from '@components/ProtectedRoute'\nimport { VideoScanInstructions } from '@components/VideoMode/VideoScanInstructions'\nimport { PictureVideoError } from '@components/PictureVideoError'\nimport { TakePictureInstructions } from '@components/PictureMode/TakePicture/TakePictureInstructions'\n\nexport const VMRoutes: React.FC = () => {\n return (\n \n \n } />\n } />\n \n \n \n }\n />\n \n \n \n }\n >\n } />\n } />\n } />\n } />\n } />\n } />\n \n \n \n \n }\n >\n } />\n } />\n } />\n } />\n \n \n \n )\n}\n","import { ThemeProvider } from 'styled-components'\nimport { Config } from '@customTypes/config'\nimport { ConfigContext, useConfig } from '@providers/configProvider'\nimport { ErrorBoundary } from '@components/ErrorBoundary'\nimport { I18nextProvider } from 'react-i18next'\nimport { Provider, useDispatch } from 'react-redux'\nimport { useEffect } from 'react'\nimport { VMRoutes } from './Routes'\nimport { store } from './store'\nimport { GlobalStyles, theme } from './theme'\nimport { useI18nInstance } from './i18n'\nimport { useInitAnimationApp } from '@hooks/useAnimationApp'\nimport { setWishlist } from '@store/actions/wishlist'\nimport { setVmProducts } from '@store/actions/products'\nimport { resetUiState } from '@store/actions/ui'\n\nconst AnimationAppActions: React.FC = () => {\n const { restartMenuAnimation } = useConfig()\n\n const { resetMenuAnimation } = useInitAnimationApp()\n\n useEffect(() => {\n if (restartMenuAnimation) {\n resetMenuAnimation()\n }\n }, [resetMenuAnimation, restartMenuAnimation])\n\n return null\n}\n\nconst App: React.FC = () => {\n const { wishlistedUpcs } = useConfig()\n const i18nInstance = useI18nInstance()\n const dispatch = useDispatch()\n\n useEffect(() => {\n if (wishlistedUpcs) {\n dispatch(setWishlist(wishlistedUpcs))\n }\n }, [dispatch, wishlistedUpcs])\n\n useEffect(() => {\n // reset state\n dispatch(setVmProducts([]))\n dispatch(resetUiState())\n }, [dispatch])\n\n return (\n \n \n \n \n \n )\n}\n\nconst VMWidget: React.FC<{ config: Config }> = ({ config }) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default VMWidget\n","import { useConfig } from '@providers/configProvider'\nimport { liveTryOn, pictureMode, videoMode } from '@utils/routes'\nimport { useEffect } from 'react'\nimport { useNavigate } from 'react-router'\nimport { Experience, VtoPage } from '@customTypes/experience'\nimport { useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\nimport { clearPictureVideoIds } from '@utils/sessionStorage'\n\nexport const AvailableMode: React.FC = () => {\n const navigate = useNavigate()\n const { isPictureModeEnabled, isTryOnEnabled, isVideoModeEnabled, experience } = useConfig()\n const isPrivacyAccepted = useSelector((s: AppState) => s.privacyPolicy.isPrivacyAccepted)\n\n const defaultExperience: Experience | undefined =\n experience ||\n (isTryOnEnabled\n ? VtoPage.LiveTryOn\n : isPictureModeEnabled\n ? VtoPage.PictureMode\n : isVideoModeEnabled\n ? VtoPage.VideoMode\n : undefined)\n\n useEffect(() => {\n if (!isPrivacyAccepted) {\n // when the cookie expires then clear picture id and video id\n clearPictureVideoIds()\n }\n\n if (isTryOnEnabled && defaultExperience === VtoPage.LiveTryOn) {\n navigate(liveTryOn())\n return\n }\n if (isPictureModeEnabled && defaultExperience === VtoPage.PictureMode) {\n navigate(pictureMode())\n return\n }\n if (isVideoModeEnabled && defaultExperience === VtoPage.VideoMode) {\n navigate(videoMode())\n return\n }\n }, [\n defaultExperience,\n isPictureModeEnabled,\n isPrivacyAccepted,\n isTryOnEnabled,\n isVideoModeEnabled,\n navigate,\n ])\n\n return null\n}\n","import {\n CatalogContainer,\n CatalogItem,\n CatalogItemInner,\n CatalogItemWrapper,\n StyledLabelColor,\n CarouselWrapper,\n} from '../styles'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport Swiper, { SwiperInstance } from 'react-id-swiper'\n\nimport { SwiperOptions } from 'swiper'\nimport { Color } from '@customTypes/product'\nimport { trackClickColorCarousel } from '@libs/analytics'\nimport { useVM } from '@providers/VmProvider'\n\nconst TIME_TO_HIDE_TOOLTIP = 2000\n\nconst swiperParams: SwiperOptions = {\n slidesPerView: 'auto',\n spaceBetween: 5,\n centeredSlides: true,\n slideToClickedSlide: true, // see: LVM-283\n}\n\ninterface ColorsCatalogProps {\n colors: Color[]\n selectedColor: string\n onChangeColor: (color: string) => void\n}\n\nexport const ColorsCatalog: React.FC = ({\n colors,\n selectedColor,\n onChangeColor,\n}) => {\n const selectedIndex = colors.findIndex(el => el.colorCode === selectedColor)\n const [currentSlide, setCurrentSlide] = useState(selectedIndex !== -1 ? selectedIndex : 0)\n const [isTooltipVisible, setTooltipVisibility] = useState(true)\n const swiper = useRef(null)\n const timer = useRef | null>(null)\n\n const [isColorsReady, setIsColorReady] = useState(false)\n\n const { isReady } = useVM()\n\n const setSwiper = (swiperInstance: SwiperInstance) => {\n swiper.current = swiperInstance\n }\n\n const changeColor = useCallback(\n (color: string) => {\n if (!!color) {\n onChangeColor(color)\n trackClickColorCarousel()\n }\n },\n [onChangeColor]\n )\n\n useEffect(() => {\n if (isColorsReady) {\n setTooltipVisibility(true)\n timer.current = setTimeout(() => {\n setTooltipVisibility(false)\n timer.current && clearTimeout(timer.current)\n timer.current = null\n }, TIME_TO_HIDE_TOOLTIP)\n\n swiper.current?.on('slideChangeTransitionStart', () => {\n if (swiper.current) {\n setCurrentSlide(swiper.current.realIndex)\n }\n })\n\n if (selectedColor != colors[currentSlide]?.colorCode) {\n changeColor(colors[currentSlide]?.colorCode)\n }\n }\n\n return function cleanup() {\n swiper.current?.off('click')\n swiper.current?.off('slideChangeTransitionEnd')\n }\n }, [swiper, colors, selectedColor, currentSlide, changeColor, isColorsReady])\n\n useEffect(() => {\n if (!!colors.length) {\n // since we lazy load the Transitions Lens\n // we need to update the carousel after fetching the Transitions Colors from the server\n swiper.current?.update()\n }\n }, [colors])\n\n useEffect(() => {\n if (isReady && !!colors.length) {\n setIsColorReady(true)\n } else setIsColorReady(false)\n }, [isReady, colors])\n\n const selectedColorLabel = colors.find(color => color?.colorCode === selectedColor)?.colorName\n\n return (\n \n \n \n {colors.map(({ colorCode, swatchImage }) => (\n \n \n \n \n \n ))}\n \n {isColorsReady && (\n \n {selectedColorLabel}\n \n )}\n \n \n )\n}\n","import { pxToEm } from '@libs/styled'\nimport styled, { css } from 'styled-components'\n\nexport const CatalogContainer = styled.div`\n position: relative;\n .swiper-container {\n width: 100%;\n }\n .swiper-wrapper {\n display: flex;\n align-items: center;\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: flex;\n transition-property: transform;\n box-sizing: content-box;\n }\n`\n\nexport const Image = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n border-radius: 50%;\n`\n\nexport const CatalogItem = styled.div<{ bgImg?: string; isActive?: boolean }>`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n border-radius: 50%;\n width: 70%;\n height: 70%;\n background-color: white;\n overflow: hidden;\n border: ${({ theme, isActive }) => isActive && `0.275em solid ${theme.palette.white[100]}`};\n opacity: ${({ isActive }) => (isActive ? '1' : '0.75')};\n padding: ${pxToEm(4)};\n background-clip: content-box;\n ${({ bgImg }) =>\n bgImg &&\n css`\n background-image: url(${bgImg});\n background-size: contain;\n `}\n`\n\nexport const CatalogItemInner = styled.div`\n width: ${pxToEm(80)};\n height: ${pxToEm(80)};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n`\n\nexport const CatalogItemWrapper = styled.div`\n &.swiper-slide-active {\n padding: 0;\n }\n\n &.swiper-slide {\n flex-shrink: unset;\n width: auto;\n height: auto;\n transition-property: unset;\n }\n`\nexport const CatalogInfoContainer = styled.div`\n position: absolute;\n bottom: 100%;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n`\n\nexport const StyledLabel = styled.span`\n color: white;\n position: absolute;\n width: max-content;\n transition: opacity 0.3s ease;\n`\n\nexport const StyledLabelColor = styled(StyledLabel)`\n top: -${pxToEm(40)};\n left: 0;\n width: 100%;\n text-align: center;\n transition: all 0.2s ease-in-out;\n display: flex;\n flex-direction: column;\n justify-content: center;\n font: ${({ theme }) => theme.fonts.spanBold};\n\n &.show {\n opacity: 1;\n }\n\n &.hide {\n opacity: 0;\n }\n\n ${({ theme }) => theme.media.large} {\n flex-direction: row;\n gap: 14px;\n }\n\n span {\n margin: 0 !important;\n }\n`\n\nexport const CarouselWrapper = styled.div<{ visibility: 'visible' | 'hidden' }>`\n position: absolute;\n bottom: ${pxToEm(85)};\n padding-top: ${pxToEm(40)};\n left: 0;\n right: 0;\n overflow: hidden;\n z-index: ${({ visibility }) => (visibility === 'visible' ? '2' : '-1')};\n visibility: ${({ visibility }) => visibility};\n`\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const ErrorBoundaryWrapper = styled.div`\n padding: ${pxToEm(40)} ${pxToEm(32)};\n background: ${({ theme }) => theme.palette.whiteSmoke};\n height: 100%;\n display: flex;\n justify-content: center;\n font: ${({ theme }) => theme.fonts.headingSmall};\n text-align: center;\n ${({ theme }) => theme.media.medium} {\n padding: ${pxToEm(80)} ${pxToEm(155)};\n }\n`\n","import { Layout } from '@components/Layout'\nimport { trackGenericError } from '@libs/analytics'\nimport React from 'react'\nimport { ErrorBoundaryWrapper } from './styles'\nimport { VM_READY } from '@components/Loader/loader'\n\ninterface IErrorBoundaryComponentState {\n error: Error | null\n}\n\ninterface IErrorBoundary {\n children?: React.ReactNode\n}\n\nexport class ErrorBoundary extends React.Component {\n state: IErrorBoundaryComponentState = { error: null }\n\n componentDidCatch(error: Error) {\n trackGenericError('400', error.message)\n this.setState({ error })\n }\n\n render() {\n if (this.state.error) {\n // TODO: create error widget component\n return (\n // injects .vm-ready classname to remove the AppLoader component if there is any error\n \n {this.state.error.message}\n \n )\n }\n return this.props.children\n }\n}\n","import styled from 'styled-components'\nimport { pxToEm } from '@libs/styled'\nimport { resetButtonStyles } from '@components/Menu/styles'\n\nexport const ModalWindowContainer = styled.div`\n z-index: 1001;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n align-items: flex-start;\n background-color: ${({ theme }) => theme.palette.white[100]};\n width: 100%;\n height: 100%;\n`\n\nexport const ModalCloseButton = styled.button`\n ${resetButtonStyles};\n position: absolute;\n right: ${pxToEm(11)};\n top: ${pxToEm(11)};\n`\n\nexport const ModalContainer = styled.div`\n max-width: ${pxToEm(290)};\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: ${pxToEm(56)} 0 ${pxToEm(24)} 0;\n height: 100%;\n margin: 0 auto;\n\n ${({ theme }) => theme.media.medium} {\n padding: ${pxToEm(47)} 0 ${pxToEm(32)} 0;\n }\n`\n\nexport const Text = styled.span`\n font: ${({ theme }) => theme.fonts.paragraph};\n font-size: 14px;\n font-weight: 400;\n line-height: normal;\n text-align: center;\n color: #e84159;\n margin-top: 6px;\n`\nexport const ModalTitle = styled.h1`\n font-family: var(--fasa-font-bold);\n font-size: 28px;\n font-style: normal;\n font-weight: 700;\n line-height: 36px;\n margin-bottom: 40px;\n margin-top: 8px;\n`\nexport const ModalMessage = styled.div`\n margin-bottom: 55px;\n display: flex;\n flex-direction: column;\n align-items: center;\n`\n","import React, { useEffect, useState } from 'react'\nimport { AlertIcon, CloseScreenshotIcon } from '@components/core/Icons'\nimport { Modal } from '@components/core/Modal'\nimport {\n ModalCloseButton,\n ModalWindowContainer,\n ModalContainer,\n Text,\n ModalTitle,\n ModalMessage,\n} from './styles'\nimport { useConfig } from '@providers/configProvider'\nimport { MainLoader } from '@components/Loader'\nimport { useTranslation } from 'react-i18next'\n\ninterface ErrorModalProps {\n isModalVisible: boolean\n message: string\n}\n\nexport const ErrorModal: React.FC = ({ isModalVisible, message }) => {\n const { t } = useTranslation()\n\n const [isShow, setIsShow] = useState(false)\n const { onError } = useConfig()\n\n useEffect(() => {\n setIsShow(isModalVisible)\n }, [isModalVisible])\n\n const onClose = () => {\n setIsShow(false)\n\n if (onError)\n onError({\n error: message,\n })\n }\n\n return (\n \n \n \n \n \n \n {t('CORE.RENDER_ERROR.TITLE_1')}!\n\n \n \n {message}\n \n\n \n \n \n \n )\n}\n","import { Button } from '@components/core/Button'\nimport { pxToEm } from '@libs/styled'\nimport styled, { css } from 'styled-components'\n\nexport const FooterWrapper = styled.div`\n position: absolute;\n left: 0;\n right: 0;\n bottom: ${pxToEm(20)};\n z-index: 1;\n\n ${({ theme }) => theme.media.large} {\n bottom: 0;\n }\n`\n\nexport const FooterInner = styled.div`\n position: relative;\n padding: ${pxToEm(5)};\n border-radius: ${pxToEm(50)};\n backdrop-filter: blur(pxToEm(4));\n background-color: var(--vm-components-footer-mobile-bg);\n max-width: ${pxToEm(300)};\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin: 0 auto;\n min-height: ${pxToEm(58)};\n\n ${({ theme }) => theme.media.large} {\n padding: 0 ${pxToEm(24)};\n max-width: unset;\n border-radius: 0;\n background-color: var(--vm-components-footer-desktop-bg);\n height: ${pxToEm(80)};\n }\n`\n\nexport const FooterInnerStyled = styled(FooterInner)`\n display: flex;\n align-items: center;\n justify-content: center;\n\n ${({ theme }) => theme.media.large} {\n background: transparent;\n }\n`\n\nexport const IconWrapper = styled.div`\n z-index: 2;\n width: ${pxToEm(40)};\n height: ${pxToEm(40)};\n line-height: 0;\n border-radius: 50%;\n backdrop-filter: blur(4px);\n background-color: var(--vm-components-icon-mobile-bg);\n svg,\n path {\n fill: var(--vm-components-icon-mobile-fill);\n }\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n\n ${({ theme }) => theme.media.medium} {\n width: ${pxToEm(48)};\n height: ${pxToEm(48)};\n }\n\n ${({ theme }) => theme.media.large} {\n background-color: var(--vm-components-icon-desktop-bg);\n svg,\n path {\n fill: var(--vm-components-icon-desktop-fill);\n }\n }\n`\n\nexport const FooterLabelWrapper = styled.div<{ isAlignedLeft?: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n ${({ isAlignedLeft }) =>\n isAlignedLeft\n ? css`\n align-items: flex-start;\n flex: 1;\n padding-left: ${pxToEm(10)};\n `\n : css`\n position: absolute;\n inset: 0;\n `}\n`\n\nexport const FooterLabel = styled.span`\n font: ${({ theme }) => theme.fonts.span};\n color: var(--vm-components-footer-mobile-text);\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: ${pxToEm(230)};\n\n ${({ theme }) => theme.media.medium} {\n max-width: ${pxToEm(260)};\n text-overflow: none;\n }\n\n ${({ theme }) => theme.media.large} {\n color: var(--vm-components-footer-desktop-text);\n }\n`\n\nexport const ProductName = styled(FooterLabel)`\n font: ${({ theme }) => theme.fonts.spanBold};\n`\n\nexport const ProductLensName = styled(FooterLabel)`\n font: ${({ theme }) => theme.fonts.paragraphSmall};\n`\n\nexport const AddToBagButton = styled(Button)`\n z-index: 2;\n background: var(--vm-components-icon-mobile-bg);\n color: var(--vm-components-icon-mobile-fill);\n width: unset;\n height: unset;\n padding: ${pxToEm(16)};\n margin: 0;\n cursor: pointer;\n\n ${({ theme }) => theme.media.large} {\n background: var(--vm-components-icon-desktop-bg);\n color: var(--vm-components-icon-desktop-fill);\n }\n`\n","import styled from 'styled-components'\n\nexport const PriceLine = styled.div`\n display: flex;\n gap: 5px;\n\n &.row-reverse {\n flex-direction: row-reverse;\n }\n`\n\nexport const PriceValue = styled.div`\n display: flex;\n font: ${({ theme }) => theme.fonts.span};\n color: var(--vm-components-footer-mobile-text);\n\n ${({ theme }) => theme.media.large} {\n color: var(--vm-components-footer-desktop-text);\n }\n\n &.full-price {\n text-decoration: line-through;\n color: var(--vm-components-footer-mobile-price-full);\n }\n\n &.new-price {\n color: var(--vm-components-footer-mobile-price-new);\n }\n\n ${({ theme }) => theme.media.large} {\n &.full-price {\n color: var(--vm-components-footer-desktop-price-full);\n }\n\n &.new-price {\n color: var(--vm-components-footer-desktop-price-new);\n }\n }\n\n span {\n margin: 0 !important;\n &.porder-1 {\n order: 1;\n }\n &.porder-2 {\n order: 2;\n }\n &.porder-3 {\n order: 3;\n }\n }\n`\n","import React from 'react'\nimport { PriceLine, PriceValue } from './styles'\nimport { Price as PriceType, ProductPrice } from '@customTypes/product'\nimport { useConfig } from '@providers/configProvider'\n\ninterface PriceProps {\n price?: ProductPrice\n}\n\ninterface PriceLabelProps {\n price: PriceType\n currency: string\n className: string\n currencySpacer?: string\n}\n\nconst PriceLabel: React.FC = ({ price, className, currency, currencySpacer }) => {\n const { currencySide } = useConfig()\n const orders = currencySide === 'LEFT' ? [1, 2, 3] : [3, 2, 1]\n\n currencySpacer =\n currencySpacer === undefined || currencySpacer === null ? ' ' : currencySpacer\n\n const hasComma = (price.text || '').indexOf(',') > -1\n\n return (\n \n {currency}\n {/* TODO: need to sanitize the currencySpacer input */}\n \n \n {hasComma ? price.text : parseFloat(price.text).toFixed(2)}\n \n \n )\n}\n\nexport const Price: React.FC = ({ price }) => {\n const { priceLineOrder } = useConfig()\n\n if (!price) return null\n const { previous, current, currency, currencySpacer } = price\n\n // reverse the row if the newPrice is first\n const reverse = priceLineOrder[0] === 'newPrice'\n\n return (\n
\n \n {previous && (\n \n )}\n\n \n \n
\n )\n}\n","import React from 'react'\n\nexport const ArrowRightIcon: React.FC = () => {\n return (\n \n \n \n )\n}\n","import {\n FooterWrapper,\n FooterInner,\n IconWrapper,\n FooterLabel,\n FooterLabelWrapper,\n ProductName,\n AddToBagButton,\n FooterInnerStyled,\n ProductLensName,\n} from './styles'\n\nimport { CameraIcon, CartIcon, SaveIcon, ShareIcon } from '@components/core/Icons'\nimport { Price } from '@components/Price'\n\nimport { Product } from '@customTypes/product'\nimport { useCallback } from 'react'\nimport { getTransitionLensLabel } from '@libs/transition'\nimport { useConfig } from '@providers/configProvider'\nimport { isDesktopView, isIpadView, isMobileView } from '@libs/utils'\nimport { useTranslation } from 'react-i18next'\nimport { truncateString } from '@libs/truncateString'\nimport { useTakePhoto } from '@libs/analytics'\nimport { useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\nimport { useModal } from '@hooks/useModal'\nimport { useAddToCart } from '@hooks/useAddToCart'\nimport { ArrowRightIcon } from '@components/core/Icons/ArrowRightIcon'\nimport { useVM } from '@providers/VmProvider'\nimport { useAlternativePath } from '@hooks/useAlternativePath'\n\ninterface FooterActionsProps {\n className?: string\n product: Product\n showScreenshotIcon?: boolean\n}\n\nexport const FooterActions: React.FC = ({\n className,\n product,\n showScreenshotIcon = false,\n}) => {\n const {\n isTakeScreenshotEnabled,\n addToCartText,\n onAddPrescriptionLenses,\n onAddToBag,\n disableArrowIcon,\n disableCartIcon,\n useDownloadIcon,\n useCartIcon,\n } = useConfig()\n\n const {\n isReady,\n currentLens: lensType,\n isTransitionActive,\n isPreparingScreenshot,\n getScreenshot,\n isConfigurator,\n currentColor,\n colorsCatalog,\n } = useVM()\n\n const { t } = useTranslation()\n const trackTakePhoto = useTakePhoto(product)\n const { isAlternativePath } = useAlternativePath(product)\n\n const activeName = useSelector((s: AppState) => s.ui.activeName)\n\n const { toggleModalVisibility, isModalVisible } = useModal()\n const { addToCart, currentProductPrice } = useAddToCart({ product })\n const truncatedProductName = `${truncateString(product.name, isDesktopView() ? 15 : 10)} ${\n product.size ? `(${product.size})` : ''\n }`\n\n const handleAddToCart =\n (!!onAddPrescriptionLenses || isAlternativePath) && product.rxAvailable && !isModalVisible\n ? toggleModalVisibility\n : addToCart\n\n const takeScreenShot = useCallback(() => {\n if (isReady && !isPreparingScreenshot) {\n getScreenshot && getScreenshot()\n trackTakePhoto()\n }\n }, [getScreenshot, isReady, isPreparingScreenshot, trackTakePhoto])\n\n const addToBagButton = () => {\n const isArrowIcon =\n !disableArrowIcon && ((!!onAddPrescriptionLenses && product.rxAvailable) || isAlternativePath)\n\n return isDesktopView() ? (\n useCartIcon ? (\n \n \n \n ) : (\n \n {addToCartText || t('general.add-to-cart')}\n \n )\n ) : (\n \n {isArrowIcon || !!disableCartIcon ? (\n \n ) : (\n \n )}\n \n )\n }\n\n const PhotoShareIcon = () => {\n return (\n \n {showScreenshotIcon ? (\n \n ) : useDownloadIcon ? (\n \n ) : (\n \n )}\n \n )\n }\n\n if (!isReady || (isTransitionActive && activeName === 'lens')) {\n return null\n }\n\n const isLeftPhotoShareIcon = !isTransitionActive && isTakeScreenshotEnabled\n\n if (isConfigurator) {\n const selectedLensColor = colorsCatalog.find(i => i.colorCode === currentColor)\n\n return (\n \n \n {(isMobileView() || isIpadView()) && (\n \n {truncatedProductName}\n {selectedLensColor && {selectedLensColor.lensName}}\n \n )}\n {PhotoShareIcon()}\n \n \n )\n }\n\n return (\n \n \n {isLeftPhotoShareIcon && PhotoShareIcon()}\n {isTransitionActive && isTakeScreenshotEnabled && PhotoShareIcon()}\n \n {truncatedProductName}\n \n {isTransitionActive ? (\n getTransitionLensLabel(lensType)\n ) : (\n \n )}\n \n \n {!isTransitionActive && !!onAddToBag && !product.isProductNotAvailable && addToBagButton()}\n \n \n )\n}\n","import { VirtualMirrorCatalogue } from '@luxottica/virtual-mirror'\nimport { useCallback, useEffect } from 'react'\n\nimport { Color } from '@customTypes/product'\nimport { useConfig } from '@providers/configProvider'\nimport { useRefValue } from '@hooks/useRefValue'\nimport { getColorSwatches } from '@libs/getColorSwatches'\n\ninterface InitColorSwatchesProps {\n setColors: (colors: Color[]) => void\n}\n\nexport const InitColorSwatches: React.FC = ({ setColors }) => {\n const { vmInit } = useConfig()\n\n const initializeVirtualMirror = useCallback(\n async (colorSwatches: () => Promise) => {\n try {\n const colorsData = await colorSwatches()\n\n VirtualMirrorCatalogue.build({\n ...((vmInit.glassesEnv && {\n catalogueEnvironment: vmInit.glassesEnv,\n // Use any due to impossible to import GlassesEnvironment type, required for env variable\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) as any),\n key: vmInit.key,\n })\n .downloadTransitionColorCatalogue()\n .then(transitionColors => {\n const colors: Color[] = Object.keys(transitionColors).map(colorCode => {\n const colorData = colorsData.find((color: Color) => color.colorCode === colorCode)\n return {\n colorCode,\n colorName: colorData?.colorName,\n lensName: colorData?.lensName,\n swatchImage: colorData?.swatchImage,\n clen: colorData?.clen,\n } as Color\n })\n setColors(colors)\n })\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Error retrieving color swatches: ${error}`)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },\n [vmInit.glassesEnv, vmInit.key, setColors]\n )\n const initVMRef = useRefValue(initializeVirtualMirror)\n\n useEffect(() => {\n initVMRef.current(getColorSwatches())\n }, [initVMRef])\n\n return <>\n}\n","import styled from 'styled-components'\n\nexport const ButtonsWrapper = styled.div`\n display: flex;\n justify-content: center;\n`\n\nexport const StyledContent = styled.p`\n flex-shrink: 1;\n min-height: 0;\n overflow-y: auto;\n white-space: pre-line;\n text-align: left;\n table {\n width: 100%;\n td,\n th {\n border: 1px solid ${({ theme }) => theme.palette.black};\n margin: 0;\n p {\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n tr {\n margin: 0;\n }\n }\n`\n","import styled from 'styled-components'\nimport { pxToEm } from '@libs/styled'\n\nexport const PrivacyContainer = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n background: ${({ theme }) => theme.palette.white[100]};\n color: ${({ theme }) => theme.palette.black};\n width: 100%;\n z-index: 1001;\n`\n\nexport const TitleWrapper = styled.div`\n margin: ${pxToEm(24)} 0;\n flex-direction: row;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n text-align: center;\n ${({ theme }) => theme.media.medium} {\n margin: ${pxToEm(70)} 0 ${pxToEm(56)};\n }\n h1 {\n font: ${({ theme }) => theme.fonts.titleSmall};\n }\n`\n\nexport const CtaItems = styled.div<{ withShadow: boolean }>`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background: ${({ theme }) => theme.palette.white[100]};\n padding: ${pxToEm(24)} ${pxToEm(32)} ${pxToEm(32)};\n ${({ withShadow }) =>\n withShadow && `box-shadow: 0 -${pxToEm(14)} ${pxToEm(10)} -${pxToEm(8)} rgba(0, 0, 0, 0.12);`}\n\n button {\n padding: 0 ${pxToEm(38)};\n height: ${pxToEm(48)};\n border-radius: ${pxToEm(66)};\n background: ${({ theme }) => theme.palette.black};\n\n &.decline {\n background: ${({ theme }) => theme.palette.white[100]};\n border: solid 1px ${({ theme }) => theme.palette.black};\n color: ${({ theme }) => theme.palette.black};\n }\n }\n`\n\nexport const PrivacyPolicyWrapperStyled = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n background-color: ${({ theme }) => theme.palette.white[100]};\n text-align: center;\n padding: 0 ${pxToEm(21)};\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n z-index: 1000;\n height: 100%;\n max-height: 100%;\n\n p {\n text-align: left;\n flex-grow: 1;\n margin: 0;\n }\n`\n\nexport const PrivacyPolicyContentWrapper = styled.div<{ withLabel: boolean }>`\n ${({ theme }) => theme.media.medium} {\n max-width: ${pxToEm(568)};\n }\n max-width: ${pxToEm(400)};\n margin: 0 auto;\n overflow: auto;\n text-align: left;\n white-space: pre-line;\n margin-bottom: ${({ withLabel }) => (withLabel ? pxToEm(130) : pxToEm(100))};\n font: ${({ theme }) => theme.fonts.paragraph};\n`\n\nexport const CloseIconWrapper = styled.div`\n display: none;\n ${({ theme }) => theme.media.medium} {\n display: block;\n position: absolute;\n top: ${pxToEm(35)};\n right: ${pxToEm(35)};\n }\n`\n","import React, { useCallback } from 'react'\nimport {\n PrivacyPolicyWrapperStyled,\n CtaItems,\n TitleWrapper,\n PrivacyPolicyContentWrapper,\n CloseIconWrapper,\n PrivacyContainer,\n} from './styles'\nimport { CloseIcon } from '@components/core/Icons'\nimport { pxToEm } from '@libs/styled'\nimport { useConfig } from '@providers/configProvider'\n\ninterface PrivacyWrapperProps {\n title: string\n content: React.ReactNode\n ctaContent: React.ReactNode\n className: string\n withLabel?: boolean\n withShadow?: boolean\n}\n\nexport const PrivacyPolicyWrapper: React.FC = ({\n title,\n content,\n ctaContent,\n withLabel = false,\n withShadow = true,\n className,\n}) => {\n const { onClose } = useConfig()\n\n const onCloseBtnClick = useCallback(() => {\n onClose && onClose()\n }, [onClose])\n\n return (\n \n \n \n \n \n \n \n

{title}

\n
\n {content}\n
\n {ctaContent}\n
\n
\n )\n}\n","import ApiService from './apiService'\nimport config from '@config/index'\nimport { VtoAuthDataReq, VtoAuthDataRes, VtoBipaRes } from '@customTypes/vtoData'\n\nconst apiService = new ApiService(config.vtoApiUrl)\n\nclass VtoApiService {\n private api: ApiService\n constructor(api: ApiService) {\n this.api = api\n }\n\n public generateAuthToken = (data: VtoAuthDataReq) => {\n return this.api.post('/auth/vm/token', data)\n }\n\n public getBipaContentUrls = (headers?: HeadersInit) => {\n return this.api.get('/services/vtobipams/public/v2/bipa/version', headers)\n }\n}\n\nexport const vtoApiService = new VtoApiService(apiService)\n","import { useConfig } from '@providers/configProvider'\nimport { vtoApiService } from '@services/vtoApiService'\nimport { useEffect } from 'react'\nimport { useAsync } from './useAsync'\nimport { BipaContentRes } from '@customTypes/vtoData'\nimport { fallbackLanguage } from '@utils/language'\n\nconst fetchData = async (url: string): Promise => {\n const raw = await fetch(url)\n return raw.json()\n}\n\nexport const useBipaContent = (skip: boolean) => {\n const config = useConfig()\n const { locale = fallbackLanguage(config) } = config\n\n const {\n run: getAuthData,\n data: authData,\n loading: isAuthLoading,\n } = useAsync(vtoApiService.generateAuthToken)\n\n const {\n run: getBipaContentUrls,\n data: bipaContent,\n loading: isBipaContentLoading,\n } = useAsync(vtoApiService.getBipaContentUrls)\n\n const { run: getBipa, data: bipa, loading: isBipaLoading } = useAsync(fetchData)\n\n useEffect(() => {\n if (skip) return\n if (!authData) {\n getAuthData({ rememberMe: true })\n }\n }, [authData, getAuthData, skip])\n\n useEffect(() => {\n if (skip) return\n if (!bipaContent && authData) {\n getBipaContentUrls({ Authorization: `Bearer ${authData.access_token}` })\n }\n }, [getBipaContentUrls, bipaContent, authData, skip])\n\n const jsonUrl = (bipaContent && JSON.parse(bipaContent?.jsonUrl)) || {}\n const bipaUrl = jsonUrl[locale || 'en-US'] || jsonUrl['en-US']\n\n useEffect(() => {\n if (skip) return\n if (!bipa && bipaUrl) {\n getBipa(bipaUrl)\n }\n }, [bipa, bipaUrl, getBipa, skip])\n\n return {\n bipa,\n loading: isAuthLoading || isBipaContentLoading || isBipaLoading,\n }\n}\n","import { useDispatch, useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\nimport { Button } from '../core/Button'\nimport React from 'react'\nimport { setVisibilityBipaModal } from '@store/actions/ui'\nimport { useTranslation } from 'react-i18next'\nimport { ButtonsWrapper } from './styles'\nimport { PrivacyPolicyWrapper } from './PrivacyPolicyWrapper'\nimport { useBipaContent } from '@hooks/useBipaContent'\nimport { Loading } from '@components/Loader'\n\nexport const BipaModal: React.FC = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch()\n const isBipaModalVisible = useSelector((s: AppState) => s.ui.isBipaModalVisible)\n\n const { loading, bipa } = useBipaContent(!isBipaModalVisible)\n\n if (!isBipaModalVisible) {\n return null\n }\n\n const renderCtaContent = () => (\n \n {\n dispatch(setVisibilityBipaModal(false))\n }}\n >\n {t('RETURN')}\n \n \n )\n\n return (\n \n ) : (\n
\n )\n }\n className=\"vmmv-bipa-modal\"\n />\n )\n}\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const ScreenDeviceWrapper = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${({ theme }) => theme.palette.abbey};\n z-index: 1000;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n`\n\nexport const ScreenDeviceShapeWrapper = styled.div`\n position: relative;\n height: calc(${pxToEm(144)} + ${pxToEm(4.8)});\n width: calc(${pxToEm(176)} + ${pxToEm(4.8)});\n margin-bottom: ${pxToEm(16)};\n`\n\nexport const ScreenDeviceShapeHorizontal = styled.div`\n width: ${pxToEm(144)};\n height: ${pxToEm(64)};\n border: ${pxToEm(2.4)} solid ${({ theme }) => theme.palette.darkGray};\n border-radius: ${pxToEm(8)};\n position: relative;\n top: calc(${pxToEm(80)});\n left: 0;\n`\n\nexport const ScreenDeviceShapeVertical = styled.div`\n width: ${pxToEm(64)};\n height: ${pxToEm(144)};\n border: ${pxToEm(2.4)} solid ${({ theme }) => theme.palette.white[100]};\n border-radius: ${pxToEm(8)};\n background-color: ${({ theme }) => theme.palette.darkGray};\n position: absolute;\n bottom: 0;\n right: 0;\n`\n\nexport const ScreenDeviceText = styled.div`\n color: ${({ theme }) => theme.palette.white[100]};\n font-size: ${pxToEm(18)};\n margin: 0;\n`\n\nexport const ScreenDeviceArrowWrapper = styled.div`\n position: absolute;\n width: ${pxToEm(48)};\n height: ${pxToEm(40)};\n top: ${pxToEm(27.2)};\n left: ${pxToEm(53)};\n`\n\nexport const IconWrapper = styled.div`\n position: absolute;\n top: ${pxToEm(16)};\n right: 0;\n z-index: 1001;\n padding: ${pxToEm(8)};\n background: ${({ theme }) => theme.palette.lightgray};\n`\n","import React, { useCallback } from 'react'\nimport { useDeviceOrientation } from '@hooks/useDeviceOrientation'\nimport { ArrowIcon, CloseIcon } from '@components/core/Icons'\nimport { useSetDocumentHeight } from '@hooks/useSetDocumentHeight'\nimport { useTranslation } from 'react-i18next'\nimport { isDesktopView } from '@libs/utils'\nimport {\n ScreenDeviceWrapper,\n ScreenDeviceShapeWrapper,\n ScreenDeviceArrowWrapper,\n ScreenDeviceShapeHorizontal,\n ScreenDeviceShapeVertical,\n ScreenDeviceText,\n IconWrapper,\n} from './styles'\nimport { closeVirtualMirror } from '@components/Menu/MenuList'\nimport { trackClickButtonClose } from '@libs/analytics'\nimport { useConfig } from '@providers/configProvider'\n\nconst DocHeight: React.FC = () => {\n useSetDocumentHeight()\n return null\n}\n\nexport const OrientationSreen: React.FC = () => {\n const orientation = useDeviceOrientation()\n const { t } = useTranslation()\n const { onClose } = useConfig()\n\n const onCloseBtnClick = useCallback(() => {\n onClose && onClose()\n trackClickButtonClose()\n closeVirtualMirror()\n }, [onClose])\n\n if (!orientation.isLandscape || isDesktopView()) return null\n\n return (\n <>\n {onClose && (\n \n \n \n )}\n \n \n \n \n \n \n \n \n {t('general.turn-your-device')}\n \n \n \n )\n}\n","import { useConfig } from '@providers/configProvider'\nimport { useEffect } from 'react'\n\nexport const useSetDocumentHeight = () => {\n const { selector } = useConfig()\n useEffect(() => {\n let isEffectRunning = true\n const container = document.querySelector(selector)\n const setHeight = () => {\n if (container) {\n container.style.height = `${window.innerHeight}px`\n }\n if (isEffectRunning) {\n window.requestAnimationFrame(setHeight)\n }\n }\n setHeight()\n\n return () => {\n isEffectRunning = false\n }\n }, [selector])\n}\n","import { useState, useEffect } from 'react'\n\nexport const useDeviceOrientation = () => {\n const [isLandscape, setLandscape] = useState(\n window.matchMedia('(orientation: landscape)').matches\n )\n\n const handleOrientationChange = () => {\n setLandscape(window.matchMedia('(orientation: landscape)').matches)\n }\n\n useEffect(() => {\n window.addEventListener('resize', handleOrientationChange)\n return () => window.removeEventListener('resize', handleOrientationChange)\n }, [])\n\n return {\n isLandscape,\n }\n}\n","import { useDispatch, useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\nimport { Button } from '../core/Button'\nimport React from 'react'\nimport { setVisibilityPrivacyPolicyModal } from '@store/actions/ui'\nimport { useTranslation } from 'react-i18next'\nimport { ButtonsWrapper, StyledContent } from './styles'\nimport { PrivacyPolicyWrapper } from './PrivacyPolicyWrapper'\n\nexport const PrivacyPolicyModal: React.FC = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch()\n const isPrivacyPolicyModalVisible = useSelector((s: AppState) => s.ui.isPrivacyPolicyModalVisible)\n\n if (!isPrivacyPolicyModalVisible) {\n return null\n }\n\n const renderCtaContent = () => (\n \n {\n dispatch(setVisibilityPrivacyPolicyModal(false))\n }}\n >\n {t('RETURN')}\n \n \n )\n\n return (\n \n {t('PRIVACY_FIRST_AGREEMENT')}\n \n \n }\n className=\"vmmv-privacy-policy-modal\"\n />\n )\n}\n","import { useDispatch, useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\nimport { Button } from '../core/Button'\nimport React from 'react'\nimport { setVisibilityTermsConditionsModal } from '@store/actions/ui'\nimport { useTranslation } from 'react-i18next'\nimport { ButtonsWrapper, StyledContent } from './styles'\nimport { PrivacyPolicyWrapper } from './PrivacyPolicyWrapper'\n\nexport const TermsConditionsModal: React.FC = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch()\n const isTermsConditionsVisible = useSelector((s: AppState) => s.ui.isTermsConditionsVisible)\n\n if (!isTermsConditionsVisible) {\n return null\n }\n\n const renderCtaContent = () => (\n \n {\n dispatch(setVisibilityTermsConditionsModal(false))\n }}\n >\n {t('RETURN')}\n \n \n )\n\n return (\n {t('vm-master-version.termsOfUse')}}\n className=\"vmmv-terms-conditions\"\n />\n )\n}\n","import { css } from 'styled-components'\n\nexport const normalize = css`\n /**\n * Render the main element consistently in IE.\n */\n\n main {\n display: block;\n }\n\n /* Grouping content\n ========================================================================== */\n\n /**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\n hr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n }\n\n /**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd em font sizing in all browsers.\n */\n\n pre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n }\n\n /* Text-level semantics\n ========================================================================== */\n\n /**\n * Remove the gray background on active links in IE 10.\n */\n\n a {\n background-color: transparent;\n }\n\n /**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\n abbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n }\n\n /**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\n b,\n strong {\n font-weight: bolder;\n }\n\n /**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd em font sizing in all browsers.\n */\n\n code,\n kbd,\n samp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n }\n\n /**\n * Add the correct font size in all browsers.\n */\n\n small {\n font-size: 80%;\n }\n\n /**\n * Prevent sub and sup elements from affecting the line height in\n * all browsers.\n */\n\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n\n sub {\n bottom: -0.25em;\n }\n\n sup {\n top: -0.5em;\n }\n\n /**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\n button,\n input {\n /* 1 */\n overflow: visible;\n }\n\n /**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\n button,\n select {\n /* 1 */\n text-transform: none;\n }\n\n /**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n -webkit-appearance: button;\n }\n\n /**\n * Remove the inner border and padding in Firefox.\n */\n\n button::-moz-focus-inner,\n [type=\"button\"]::-moz-focus-inner,\n [type=\"reset\"]::-moz-focus-inner,\n [type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n }\n\n /**\n * Restore the focus styles unset by the previous rule.\n */\n\n button:-moz-focusring,\n [type=\"button\"]:-moz-focusring,\n [type=\"reset\"]:-moz-focusring,\n [type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n }\n\n /**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from fieldset elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * fieldset elements in all browsers.\n */\n\n legend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n }\n\n /**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\n progress {\n vertical-align: baseline;\n }\n\n /**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n [type=\"number\"]::-webkit-inner-spin-button,\n [type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n }\n\n /**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n [type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n }\n\n /**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n [type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n /**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to inherit in Safari.\n */\n\n ::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n }\n\n /* Interactive\n ========================================================================== */\n\n /*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\n details {\n display: block;\n }\n\n /*\n * Add the correct display in all browsers.\n */\n\n summary {\n display: list-item;\n }\n\n box-sizing: border-box;\n\n & *,\n & *:before,\n & *:after {\n box-sizing: inherit;\n }\n`\n","import { BipaModal } from '@components/PrivacyPolicy/BipaModal'\nimport { LAYOUT_ID } from '@hooks/useDimensions'\nimport { OrientationSreen } from '@components/OrientationScreen'\nimport { PrivacyPolicyModal } from '@components/PrivacyPolicy/PrivacyPolicyModal'\nimport { TermsConditionsModal } from '@components/PrivacyPolicy/TermsAndConditionsModal'\nimport { normalize } from './normalize'\nimport styled from 'styled-components'\nimport React from 'react'\n\nconst LayoutStyled = styled.div`\n font-size: 16px;\n height: 100%;\n position: relative;\n overflow: hidden;\n ${normalize}\n\n ${({ theme }) => theme.media.large} {\n max-width: 768px;\n margin: 0 auto;\n }\n\n &.column {\n display: flex;\n flex-direction: column;\n }\n\n &.white-bg {\n background-color: #ffffff;\n }\n`\ninterface LayoutProps {\n className?: string\n children: React.ReactNode\n}\n\nexport const Layout = React.forwardRef(\n ({ children, className }: LayoutProps, ref: React.Ref) => {\n return (\n <>\n \n {children}\n \n \n \n \n \n \n )\n }\n)\n\nLayout.displayName = 'Layout'\n","import React from 'react'\nimport { LoaderWrapper, Dash, LoaderContent, Spin } from './styles'\nimport { withLoadingText, withAppLoader } from './loader'\n\nexport interface MainLoaderProps {\n container?: string\n children?: React.ReactNode\n isDisabled?: boolean\n isAbsolute?: boolean\n}\nexport const MainLoader: React.FC = ({ children, isAbsolute = true }) => {\n return (\n \n \n {Array(150)\n .fill('')\n .map((value: string, index: number) => (\n \n ))}\n \n {children && children}\n \n )\n}\n\nexport const Loader = withLoadingText(MainLoader)\n\nexport const AppLoader = withAppLoader(MainLoader)\n\nexport const Loading: React.FC<{ className?: string }> = ({ className }) => {\n const style = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 'calc(100vh - 200px)',\n }\n\n return (\n
\n \n
\n )\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport { useTranslation } from 'react-i18next'\n\nimport { MainLoaderProps } from './index'\nimport { LoaderCenter, LoadingText } from './styles'\n\n// .vm-ready classname should be injected in Layout component once VM is ready\n// must inject to all major pages (privacy-policy, live try-on, picture-mode, video-more, error-boundary) so loader will hide once .vm-ready injected to those pages\nexport const VM_READY = 'vm-ready'\n\nexport function withAppLoader(MainLoader: React.ComponentType) {\n const Loader: React.FC = ({ container, isDisabled = false }) => {\n const containerRef = useRef(container ? document.querySelector(container) : null)\n const [isLoading, setIsLoading] = useState(true)\n\n const observerCallback = useCallback(\n (_: MutationRecord[], observer: MutationObserver) => {\n if (isLoading) {\n const vmReady = document.getElementsByClassName(VM_READY)\n\n // if VMMV container mutates and detects .vm-ready class is injected\n // then removes the loader\n if (vmReady && vmReady[0]) {\n setIsLoading(false)\n observer.disconnect()\n }\n }\n },\n [isLoading]\n )\n useEffect(() => {\n const observer = new MutationObserver(observerCallback)\n\n if (containerRef.current && isLoading && !isDisabled)\n observer.observe(containerRef.current as Node, { childList: true, subtree: true })\n\n return () => {\n observer.disconnect()\n }\n }, [observerCallback, isLoading, isDisabled])\n\n const containerStyle =\n containerRef.current && !!getComputedStyle ? getComputedStyle(containerRef.current) : null\n\n const paddingTop = !!containerStyle ? parseFloat(containerStyle.paddingTop) : 0\n const paddingBottom = !!containerStyle ? parseFloat(containerStyle.paddingBottom) : 0\n\n return containerRef.current && isLoading && !isDisabled\n ? ReactDOM.createPortal(\n \n \n ,\n containerRef.current\n )\n : null\n }\n\n return Loader\n}\n\nexport function withLoadingText(MainLoader: React.ComponentType) {\n const Loader = () => {\n const { t } = useTranslation()\n return (\n \n {t('picture-mode.loading')}\n \n )\n }\n\n return Loader\n}\n","import { pxToEm } from '@libs/styled'\nimport styled, { keyframes } from 'styled-components'\n\nexport const LoaderCenter = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n height: 100%;\n\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: #ffffff;\n z-index: 1000;\n\n // same with layout component\n @media only screen and (min-width: 1224px) {\n max-width: 768px;\n margin: 0 auto;\n }\n`\n\nexport const LoaderWrapper = styled.div<{ isAbsolute: boolean }>`\n position: ${({ isAbsolute }) => (isAbsolute ? 'absolute' : 'block')};\n top: 30%;\n`\n\nexport const LoaderContent = styled.div`\n color: #000;\n display: inline-block;\n position: relative;\n visibility: visible;\n width: ${pxToEm(200)};\n height: ${pxToEm(200)};\n z-index: 10;\n transform: translate(${pxToEm(70)});\n\n @keyframes motion {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n }\n\n div {\n transform-origin: ${pxToEm(30)} ${pxToEm(100)};\n animation: motion 15.1s linear infinite;\n }\n\n div:after {\n content: ' ';\n display: block;\n position: absolute;\n top: ${pxToEm(3)};\n left: ${pxToEm(29)};\n width: ${pxToEm(1)};\n height: ${pxToEm(25)};\n border-radius: 20%;\n background: var(--vm-loader-dash-color);\n }\n`\n\nexport const Dash = styled.div<{ position: number }>`\n &.vmmv-loader-dash {\n animation-delay: ${({ position }) => `calc(-15s + (${position}*0.1s))`};\n transform: ${({ position }) => `rotate(calc(${position} * 2.416deg))`};\n }\n`\n\nexport const LoadingText = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font: ${({ theme }) => theme.fonts.heading};\n font-size: ${pxToEm(20)};\n text-align: center;\n z-index: 10;\n`\n\n// from - twitter bootstrap with love.\n// https://getbootstrap.com/docs/4.4/components/spinners/#growing-spinner\nconst spinnerGrow = keyframes`\n 0% {\n transform: scale(0);\n }\n\n 50% {\n opacity: 1;\n transform: none;\n }\n`\n\nexport const Spin = styled.div`\n display: inline-block;\n width: 2rem;\n height: 2rem;\n border-radius: 50%;\n opacity: 0;\n vertical-align: text-bottom;\n background-color: ${({ theme }) => theme.palette.black};\n animation: ${spinnerGrow} 1.5s linear infinite;\n`\n","import { NavBarActionScan, NavBarActionPicture, NavBarActionVideo } from '@components/core/Icons'\nimport React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useLocation, useNavigate } from 'react-router'\nimport { MenuListWrapper, MenuOption, MenuLogo, ListText } from './styles'\nimport { liveTryOn, pictureMode, pictureModeView, videoMode, videoModeView } from '@utils/routes'\nimport { useConfig } from '@providers/configProvider'\nimport { trackClickMenuTryOn, trackClickMenuVideo, trackClickMenuPicture } from '@libs/analytics'\nimport { VirtualMirror } from '@luxottica/virtual-mirror'\nimport { CONTAINER_ID_LIVE_TRY_ON } from '@providers/VmProvider'\nimport { VtoCore } from '@luxottica/vto-core'\nimport { CONTAINER_ID_PICTURE_MODE, CONTAINER_ID_VIDEO_MODE } from '@providers/VtoProvider'\nimport { Config } from '@customTypes/config'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { setVtoPage } from '@store/actions/ui'\nimport { AppState } from '@store/index'\n\nexport const closeVirtualMirror = async () => {\n try {\n await VirtualMirror.closeMirror({ target: CONTAINER_ID_LIVE_TRY_ON })\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Error closing virtual mirror: ${error}`)\n }\n}\n\nexport const closeVto = (onClose: () => void, divId: string) => {\n VtoCore.closeRender({ divId }, onClose)\n}\n\ntype Option = {\n translationKey: string\n logo: JSX.Element\n route: string\n analytic: () => void\n active: string\n}\n\nconst getOptions = (config: Config): Option[] => {\n const {\n isTryOnEnabled,\n isPictureModeEnabled,\n isVideoModeEnabled,\n isTakePictureEnabled,\n isUploadPictureEnabled,\n } = config\n return [\n ...(isTryOnEnabled\n ? [\n {\n translationKey: 'general.live-try-on',\n logo: ,\n route: liveTryOn(),\n analytic: trackClickMenuTryOn,\n active: liveTryOn(),\n },\n ]\n : []),\n ...(isPictureModeEnabled && (isTakePictureEnabled || isUploadPictureEnabled)\n ? [\n {\n translationKey: 'general.picture-mode',\n logo: ,\n route: pictureMode(),\n analytic: trackClickMenuPicture,\n active: pictureMode(pictureModeView()),\n },\n ]\n : []),\n ...(isVideoModeEnabled\n ? [\n {\n translationKey: 'general.video-mode',\n logo: ,\n route: videoMode(),\n analytic: trackClickMenuVideo,\n active: videoMode(videoModeView()),\n },\n ]\n : []),\n ]\n}\n\nexport const MenuList: React.FC<{ visible: boolean }> = ({ visible }) => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const { pathname } = useLocation()\n const config = useConfig()\n\n const options = getOptions(config)\n const dispatch = useDispatch()\n const vtoPage = useSelector((s: AppState) => s.ui.vtoPage)\n\n const onUnmount = async (activeRoute: string, fn: () => void) => {\n dispatch(setVtoPage('off'))\n switch (activeRoute) {\n case liveTryOn():\n if (vtoPage === 'live-try-on') await closeVirtualMirror()\n\n fn()\n return\n case videoMode(videoModeView()):\n if (vtoPage === 'video-mode') closeVto(fn, CONTAINER_ID_VIDEO_MODE)\n else fn()\n return\n\n case pictureMode(pictureModeView()):\n if (vtoPage === 'picture-mode') closeVto(fn, CONTAINER_ID_PICTURE_MODE)\n else fn()\n return\n\n default:\n fn()\n return\n }\n }\n return (\n \n {options.map(o => {\n return (\n {\n o.analytic()\n pathname !== o.active &&\n onUnmount(pathname, () => navigate(o.route, { state: { from: pathname } }))\n }}\n className=\"vmmv-menu-option\"\n >\n {o.logo}\n {t(o.translationKey)}\n \n )\n })}\n \n )\n}\n","import styled from 'styled-components'\nimport { pxToEm } from '@libs/styled'\nimport { resetButtonStyles } from '@components/Menu/styles'\n\nexport const MenuButton = styled.button`\n position: relative;\n z-index: 1;\n ${resetButtonStyles}\n`\n\nexport const MenuOverlay = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n opacity: 0.55;\n background-image: linear-gradient(to left, #000 10%, rgba(0, 0, 0, 0) 96%);\n`\n\nexport const MenuList = styled.ul<{ visible?: boolean }>`\n position: absolute;\n opacity: ${({ visible }) => (visible ? '1' : '0')};\n width: ${({ visible }) => (visible ? 'auto' : '0')};\n height: ${({ visible }) => (visible ? 'auto' : '0')};\n overflow: ${({ visible }) => (visible ? 'auto' : 'hidden')};\n top: ${pxToEm(65)};\n right: ${pxToEm(20)};\n transition: opacity 0.3s;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n padding: 0;\n list-style: none;\n`\n\nexport const ListItem = styled.li`\n color: ${({ theme }) => theme.palette.white[100]};\n font: ${({ theme }) => theme.fonts.span};\n margin-bottom: ${pxToEm(32)};\n`\n","import { InfoIcon } from '@components/core/Icons'\nimport {\n setVisibilityTermsConditionsModal,\n setVisibilityPrivacyPolicyModal,\n setVisibilityBipaModal,\n} from '@store/actions/ui'\nimport { useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useDispatch } from 'react-redux'\nimport { MenuButton, MenuOverlay, MenuList, ListItem } from './styles'\nimport styled from 'styled-components'\nimport { pxToEm } from '@libs/styled'\n\ninterface InfoProps {\n toggleVisibility: () => void\n isVisible: boolean\n}\n\nconst InfoButton = styled(MenuButton)`\n margin-right: 0;\n\n ${({ theme }) => theme.media.medium} {\n margin-right: ${pxToEm(8)};\n }\n`\n\nexport const Info: React.FC = ({ toggleVisibility, isVisible }) => {\n const { t } = useTranslation()\n const dispatch = useDispatch()\n\n const onTermsAndConditions = useCallback(() => {\n dispatch(setVisibilityTermsConditionsModal(true))\n }, [dispatch])\n\n const onPrivacyPolicy = useCallback(() => {\n dispatch(setVisibilityPrivacyPolicyModal(true))\n }, [dispatch])\n\n const onBipa = useCallback(() => {\n dispatch(setVisibilityBipaModal(true))\n }, [dispatch])\n\n return (\n <>\n \n \n \n {isVisible && }\n \n {t('PRIVACY_POLICY')}\n {t('NOTICE_OF_BIOMETRIC_USE')}\n \n {t('PRIVACY_IMPLICIT_TERMS_AND_CONDITIONS')}\n \n \n \n )\n}\n","import { CloseIcon, MenuClose, MenuOpen } from '@components/core/Icons'\nimport { useAnimation } from '@hooks/useAnimationApp'\nimport { useConfig } from '@providers/configProvider'\nimport React, { useCallback, useState } from 'react'\nimport { closeVirtualMirror, closeVto, MenuList } from './MenuList'\nimport { MenuButton, MenuWrapper } from './styles'\nimport { Info } from '@components/Info'\nimport { trackClickButtonClose } from '@libs/analytics'\nimport { OverlayWrapper } from '@components/core/Overlay'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\nimport { setMenuVisibility, setVtoPage } from '@store/actions/ui'\nimport { CONTAINER_ID_PICTURE_MODE, CONTAINER_ID_VIDEO_MODE } from '@providers/VtoProvider'\n\ninterface MenuProps {\n hasMirrorRendered?: boolean\n fromStore?: boolean\n}\n\nexport const Menu: React.FC = ({ hasMirrorRendered, fromStore }) => {\n const [isInfoVisible, setIsInfoVisible] = useState(false)\n\n const isMenuVisible = useSelector((s: AppState) => s.ui.isMenuVisible)\n const vtoPage = useSelector((s: AppState) => s.ui.vtoPage)\n const dispatch = useDispatch()\n\n const { onClose } = useConfig()\n\n const cbOnEnd = useCallback(() => {\n dispatch(setMenuVisibility(false))\n }, [dispatch])\n\n const cbOnStart = useCallback(() => {\n dispatch(setMenuVisibility(true))\n }, [dispatch])\n\n useAnimation(!!hasMirrorRendered, isMenuVisible, cbOnStart, cbOnEnd, 'menu')\n\n const onMenuBtnClick = useCallback(() => {\n dispatch(setMenuVisibility(!isMenuVisible))\n }, [dispatch, isMenuVisible])\n\n const onCloseBtnClick = useCallback(() => {\n trackClickButtonClose()\n\n switch (vtoPage) {\n case 'live-try-on': {\n closeVirtualMirror()\n break\n }\n case 'picture-mode': {\n closeVto(() => {\n return\n }, CONTAINER_ID_PICTURE_MODE)\n break\n }\n case 'video-mode': {\n closeVto(() => {\n return\n }, CONTAINER_ID_VIDEO_MODE)\n }\n }\n\n dispatch(setVtoPage('off'))\n\n onClose && onClose()\n }, [dispatch, onClose, vtoPage])\n\n const toggleInfoVisibility = useCallback(() => {\n setIsInfoVisible(c => !c)\n }, [])\n\n const onOverlayClick = useCallback(() => {\n if (isMenuVisible || isInfoVisible) {\n setIsInfoVisible(false)\n dispatch(setMenuVisibility(false))\n }\n }, [isMenuVisible, isInfoVisible, dispatch])\n\n return (\n \n \n {isMenuVisible ? : }\n \n\n {fromStore && onClose && (\n \n \n \n )}\n {!fromStore && }\n {isMenuVisible && }\n \n \n )\n}\n","import styled, { css } from 'styled-components'\nimport { pxToEm } from '@libs/styled'\n\nexport const resetButtonStyles = css`\n border: none;\n background: none;\n outline: none;\n stroke: none;\n margin: 0;\n padding: 0;\n font-size: inherit;\n`\n\nexport const MenuButton = styled.button`\n position: relative;\n cursor: pointer;\n z-index: 1;\n color: ${({ theme }) => theme.palette.white[100]};\n ${resetButtonStyles}\n`\n\nexport const MenuWrapper = styled.div<{ active?: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: ${pxToEm(10)};\n padding-right: ${pxToEm(14)};\n\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n z-index: ${({ active }) => (active ? 2 : 1)};\n height: ${({ active }) => (active ? '100%' : 'auto')};\n background-image: ${({ active }) =>\n !active ? 'linear-gradient(to bottom, rgba(0,0,0,0.7) 10%, rgba(0,0,0,0) 96%)' : 'none'};\n\n ${({ theme }) => theme.media.medium} {\n padding-left: ${pxToEm(23)};\n padding-right: ${pxToEm(22)};\n }\n`\n\nexport const MenuListWrapper = styled.ul<{ visible?: boolean }>`\n position: absolute;\n padding: 0;\n opacity: ${({ visible }) => (visible ? '1' : '0')};\n top: ${pxToEm(65)};\n left: ${pxToEm(10)};\n transition: opacity 0.3s;\n width: ${({ visible }) => (visible ? 'auto' : '0')};\n height: ${({ visible }) => (visible ? 'auto' : '0')};\n overflow: ${({ visible }) => (visible ? 'auto' : 'hidden')};\n\n ${({ theme }) => theme.media.medium} {\n left: ${pxToEm(23)};\n }\n`\n\nexport const MenuOption = styled.li`\n display: flex;\n align-items: center;\n margin-bottom: ${pxToEm(20)};\n cursor: pointer;\n`\n\nexport const MenuLogo = styled.div`\n padding: ${pxToEm(10)};\n line-height: 0;\n border-radius: 50%;\n margin-right: ${pxToEm(10)};\n border: ${({ theme }) => `1px solid ${theme.palette.white[100]}`};\n backdrop-filter: blur(40px);\n background-color: ${({ theme }) => theme.palette.white[40]};\n`\n\nexport const ListText = styled.span<{ active?: boolean }>`\n padding: ${pxToEm(5)} ${pxToEm(10)};\n font: ${({ theme }) => theme.fonts.headingSmall};\n font-size: 15px;\n text-shadow: 0 0 7px rgba(0, 0, 0, 0.3);\n color: ${({ theme }) => theme.palette.white[100]};\n backdrop-filter: blur(20px);\n background-color: ${({ active, theme }) => (active ? theme.palette.white[40] : 'none')};\n border-radius: ${pxToEm(15)};\n`\n","import React from 'react'\nimport {\n FaceShapeIcon,\n SunIcon,\n FocusIcon,\n RelaxFaceIcon,\n HoldDeviceIcon,\n EyeglassesOffIcon,\n} from '@components/core/Icons'\nimport { useTranslation } from 'react-i18next'\nimport {\n PictureModeEntryPageWraper,\n Title,\n TitleWrapper,\n TipsWrapper,\n TipTake,\n IconWrapper,\n TipDescription,\n} from '../styles'\nimport { BackButton } from '@components/core/BackButton'\n\nimport { pictureMode, takePicture } from '@utils/routes'\nimport { useNavigate } from 'react-router'\nimport { useFromPage } from '@libs/analytics'\nimport StickyButton from '@components/core/StickyButton'\n\nconst TAKE_PICTURE_TIPS = [\n { text: 'light', icon: },\n { text: 'look-straight-2', icon: },\n { text: 'relaxed-face', icon: },\n { text: 'take-eyeglasses-off', icon: },\n { text: 'move-your-hair', icon: },\n { text: 'hold-with-both-hands', icon: },\n]\n\nexport const TakePictureInstructions: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const from = useFromPage()\n\n const handleGetStartedClick = () => navigate(pictureMode(takePicture()))\n\n return (\n <>\n {from && }\n \n \n {t('take-tips.title')}\n \n \n {TAKE_PICTURE_TIPS.map((tip, index) => (\n \n {tip.icon}\n \n \n ))}\n \n {t('general.ok-get-started')}\n \n \n )\n}\n","import {\n FrameAdvisorCapture,\n FrameAdvisorRegion,\n FrameAdvisorResult,\n InitializeParameters,\n} from '@luxottica/frame-advisor-capture'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { useNavigate } from 'react-router'\nimport { useDispatch } from 'react-redux'\nimport { BackButton } from '@components/core/BackButton'\nimport { pictureMode, pictureModeView, pictureVideoModeError } from '@utils/routes'\nimport { useTranslation } from 'react-i18next'\nimport { useConfig } from '@providers/configProvider'\nimport {\n Spinner,\n SpinnerWrapper,\n FaceScanAppWrapper,\n FaceScanAppContainer,\n GradientBackgroundPolygon,\n FaceScanAppTarget,\n BlurBlock,\n ParagraphDescription,\n Corner,\n} from './styles'\nimport { trackPicktureTakeFail, trackVmPrivacyFail, trackVmPrivacyReject } from '@libs/analytics'\nimport { default as appConfig } from '@config/index'\nimport { setVtoPage } from '@store/actions/ui'\nimport { setPictureId } from '@utils/sessionStorage'\nimport { fallbackLanguage } from '@utils/language'\n\nconst CONTAINER_ID = 'vm-app-facescanapp'\n\nexport const TakePicture: React.FC = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch()\n const navigate = useNavigate()\n\n const config = useConfig()\n const {\n store: { region },\n vmInit: { environment, source },\n locale = fallbackLanguage(config),\n } = config\n\n const [showScan, setShowScan] = useState(false)\n const [scanSuccess, setScanSuccess] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n\n const vtoCaptureClose = useCallback(\n (onResCb?: () => void) => {\n FrameAdvisorCapture.close()\n FrameAdvisorCapture.closeVtoCapture()\n dispatch(setVtoPage('off'))\n onResCb?.()\n },\n [dispatch]\n )\n\n useEffect(() => {\n // Use any due to impossible to import InternalInitializeParameters type, required for env variable\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const initOptions: InitializeParameters | any = {\n options: {\n locale: locale || 'en-US',\n environment: environment || appConfig.vmEnv,\n region: (region || 'US') as FrameAdvisorRegion,\n source: source,\n },\n callbacks: {\n onCaptureError: () => {\n trackPicktureTakeFail()\n setIsLoading(false)\n vtoCaptureClose()\n navigate(`${pictureMode(pictureVideoModeError())}?from=${pictureMode()}`)\n },\n onCountdown: (current: number, total: number) => {\n if (current === total) {\n setShowScan(false)\n }\n },\n onAdvisorResult: (result: FrameAdvisorResult) => {\n setIsLoading(false)\n result && setPictureId(result.videoId || '')\n vtoCaptureClose()\n navigate(pictureMode(pictureModeView()))\n },\n onCaptureProcess: () => {\n setShowScan(true)\n },\n onLoading: () => {\n setScanSuccess(true)\n setIsLoading(true)\n },\n onPrivacyFail: trackVmPrivacyFail,\n onPrivacyReject: trackVmPrivacyReject,\n },\n privacy: {\n termsAndConditions: 'javascript:void()',\n localizationText: 'javascript:void()',\n },\n }\n\n initOptions.auth = {\n accessToken: undefined,\n refreshToken: undefined,\n }\n\n FrameAdvisorCapture.initialize(initOptions)\n .then(initReturns => {\n if (!initReturns.isSupported) {\n // eslint-disable-next-line no-console\n console.error('The browser does not support a key feature for the experience')\n }\n FrameAdvisorCapture.capture({\n target: CONTAINER_ID,\n options: {\n showLoading: false,\n enableVto: true,\n enableMachineLearning: false,\n },\n })\n\n dispatch(setVtoPage('fa-vto-capture'))\n })\n .catch(error => {\n // eslint-disable-next-line no-console\n console.error(error)\n })\n }, [navigate, dispatch, locale, environment, region, source, vtoCaptureClose])\n\n return (\n <>\n {!showScan && (\n \n \n \n )}\n \n \n \n {isLoading && (\n <>\n {t('picture-scan.picture-scan-step-2')}\n \n )}\n {(showScan || isLoading) && (\n <>\n \n \n \n \n \n \n {isLoading && }\n \n \n )}\n \n \n )\n}\n","import styled, { css } from 'styled-components'\nimport { pxToEm } from '@libs/styled'\n\nconst textDescription = css`\n z-index: 1;\n margin-top: ${pxToEm(80)};\n font: ${({ theme }) => theme.fonts.paragraph};\n`\n\nexport const SpinnerWrapper = styled.div`\n z-index: 2;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`\n\nexport const Spinner = styled.div`\n border: ${pxToEm(4)} solid ${({ theme }) => theme.palette.whiteSmoke};\n border-top: ${pxToEm(4)} solid ${({ theme }) => theme.palette.black};\n border-radius: 50%;\n width: ${pxToEm(80)};\n height: ${pxToEm(80)};\n animation: spin 1s linear infinite;\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`\n\nexport const FaceScanAppWrapper = styled.div`\n width: 100%;\n height: 100%;\n position: relative;\n\n .navigation,\n .page-title,\n .frame-advisor-error-overlay .frame-advisor-error-overlay-modal-button {\n display: none;\n }\n\n .frame-advisor-root-style .fa-time-remaining {\n position: absolute;\n font-family: var(--vm-default-font);\n font-size: ${pxToEm(104)};\n font-weight: bold;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-shadow: none;\n }\n\n .frame-advisor-error-overlay .frame-advisor-error-overlay-modal {\n height: ${pxToEm(150)};\n }\n\n .frame-advisor-root-style .fa-nudging-guide {\n ${textDescription}\n height: unset;\n text-shadow: none;\n }\n\n video::-webkit-media-controls {\n display: none;\n }\n`\n\nexport const ParagraphDescription = styled.p`\n ${textDescription}\n position: absolute;\n top: 0;\n text-align: center;\n width: 100%;\n color: ${({ theme }) => theme.palette.white[100]};\n`\n\nexport const BlurBlock = styled.div`\n filter: blur(15px);\n border: solid ${pxToEm(11)} rgba(33, 92, 207, 0.6);\n border-radius: ${pxToEm(30)};\n position: absolute;\n width: 80%;\n height: 50%;\n top: 50%;\n left: 50%;\n overflow: hidden;\n transform: translate(-50%, -50%);\n ${({ theme }) => theme.media.medium} {\n height: 60%;\n width: 60%;\n }\n`\n\nexport const Corner = styled.div<{ scanSuccess: boolean }>`\n width: ${({ scanSuccess }) => (scanSuccess ? '100%' : '40%')};\n height: ${({ scanSuccess }) => (scanSuccess ? '100%' : '40%')};\n border: ${pxToEm(4)} solid white;\n border-radius: ${pxToEm(30)};\n ${({ scanSuccess }) =>\n !scanSuccess &&\n `\n border-bottom: 0;\n border-right: 0;\n border-radius: 0;\n border-top-left-radius: ${pxToEm(30)};\n `}\n\n &.vmmv-top-right {\n transform: scale(-1, 1);\n }\n\n &.vmmv-bottom-left {\n transform: scale(1, -1);\n }\n\n &.vmmv-bottom-right {\n transform: rotate(180deg);\n }\n`\n\nexport const FaceScanAppTarget = styled.div`\n border-radius: ${pxToEm(30)};\n height: 50%;\n left: 50%;\n overflow: hidden;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 80%;\n z-index: 1;\n display: flex;\n align-content: space-between;\n justify-content: space-between;\n flex-wrap: wrap;\n\n ${({ theme }) => theme.media.medium} {\n height: 60%;\n width: 60%;\n }\n`\n\nexport const GradientBackground = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-image: linear-gradient(to bottom, #000c13 0%, rgba(196, 196, 196, 0) 100%);\n opacity: 0.6;\n`\n\nexport const GradientBackgroundPolygon = styled(GradientBackground)`\n clip-path: polygon(\n 0% 0%,\n 0% 100%,\n calc(10% + 2px) 100%,\n calc(10% + 2px) calc(28% + 2px),\n calc(14% + 2px) calc(25% + 2px),\n calc(86% - 2px) calc(25% + 2px),\n calc(90% - 2px) calc(28% + 2px),\n calc(90% - 2px) calc(72% - 2px),\n calc(86% - 2px) calc(75% - 2px),\n calc(14% + 2px) calc(75% - 2px),\n calc(10% + 2px) calc(72% - 2px),\n calc(10% + 2px) 100%,\n 100% 100%,\n 100% 0%\n );\n\n ${({ theme }) => theme.media.medium} {\n clip-path: polygon(\n 0% 0%,\n 0% 100%,\n calc(20% + 2px) 100%,\n calc(20% + 2px) calc(22% + 2px),\n calc(22% + 2px) calc(20% + 2px),\n calc(78% - 2px) calc(20% + 2px),\n calc(80% - 2px) calc(22% + 2px),\n calc(80% - 2px) calc(78% - 2px),\n calc(78% - 2px) calc(80% - 2px),\n calc(22% + 2px) calc(80% - 2px),\n calc(20% + 2px) calc(78% - 2px),\n calc(20% + 2px) 100%,\n 100% 100%,\n 100% 0%\n );\n }\n`\n\nexport const FaceScanAppContainer = styled.div`\n width: 100%;\n height: inherit;\n display: flex;\n justify-content: center;\n align-content: center;\n\n ellipse {\n stroke: transparent;\n }\n`\n","import styled, { css } from 'styled-components'\nimport { pxToEm } from '@libs/styled'\nimport { TFunction } from 'i18next'\n\nconst acceptButton = css`\n // padding: ${pxToEm(19)} ${pxToEm(16)};\n // width: fit-content;\n width: ${pxToEm(182)};\n height: ${pxToEm(56)};\n border-radius: ${pxToEm(50)};\n border: none;\n background: ${({ theme }) => theme.palette.primary.black[100]};\n color: ${({ theme }) => theme.palette.primary.white[100]};\n font: ${({ theme }) => theme.fonts.spanBold};\n margin: 0;\n`\n\nconst acceptButtonAfter = css`\n display: block;\n color: ${({ theme }) => theme.palette.primary.white[100]};\n`\n\nexport const TryAgainButton = styled.div`\n ${acceptButton};\n margin-bottom: ${pxToEm(32)};\n color: ${({ theme }) => theme.palette.primary.white[100]};\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n padding: 0px 20px;\n text-align: center;\n`\n\nexport const ButtonsContainer = styled.div`\n position: absolute;\n display: flex;\n flex-direction: column;\n bottom: ${pxToEm(32)};\n justify-content: center;\n align-items: center;\n`\n\nexport const StyledDiv = styled.div<{ tFunc: TFunction }>`\n width: 45%;\n height: 40%;\n\n ${({ theme }) => theme.media.small} {\n width: 80%;\n height: 55%;\n }\n\n ${({ theme }) => theme.media.medium} {\n height: 60%;\n }\n\n &.frame-advisor-root-style {\n .frame-advisor-error-overlay,\n .upload-image-drop-zone-text,\n .upload-image-loading-text {\n display: none;\n }\n\n .upload-image-display-image-container,\n .upload-image-container {\n position: relative;\n }\n\n .upload-image-container,\n .upload-image {\n height: 100%;\n }\n\n .upload-image-container.button-wrapper {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n max-height: ${pxToEm(93)};\n background: ${({ theme }) => theme.palette.white[100]};\n box-shadow: 0 -${pxToEm(14)} ${pxToEm(10)} -${pxToEm(8)} rgba(0, 0, 0, 0.12);\n\n ${({ theme }) => theme.media.ipad['9.7']} {\n background: transparent;\n box-shadow: unset;\n max-height: ${pxToEm(25 + 93)};\n padding-bottom: ${pxToEm(25)};\n }\n }\n\n .upload-image-display-controls {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n bottom: -110%;\n left: 50%;\n transform: translate(-50%, 0);\n\n ${({ theme }) => theme.media.small} {\n bottom: -50%;\n }\n }\n\n .upload-image-display-controls button {\n margin-bottom: ${pxToEm(16)};\n margin-top: 0;\n }\n\n .upload-image-display-controls .upload-image-display-decline {\n margin-bottom: ${pxToEm(40)};\n }\n\n .upload-image-display-accept {\n ${acceptButton};\n margin-bottom: ${pxToEm(32)};\n position: relative;\n color: ${({ theme }) => theme.palette.secondary.black[100]};\n cursor: pointer;\n\n &:after {\n content: '${({ tFunc }) => tFunc('picture-mode.ok-upload-cta') as string}';\n ${acceptButtonAfter};\n top: ${pxToEm(20)};\n left: ${pxToEm(48)};\n width: auto;\n white-space: nowrap;\n }\n }\n\n .upload-image-display-decline {\n visibility: hidden;\n position: relative;\n width: ${pxToEm(180)};\n font-size: 16px;\n cursor: pointer;\n\n &:after {\n content: '${({ tFunc }) => tFunc('picture-mode.select-another-picture') as string}';\n display: block;\n position: absolute;\n font: ${({ theme }) => theme.fonts.span};\n color: ${({ theme }) => theme.palette.black};\n visibility: visible;\n top: 0;\n left: ${pxToEm(22)};\n text-decoration: underline;\n white-space: nowrap;\n }\n }\n\n .upload-image-loading {\n backdrop-filter: none;\n transition: none;\n }\n\n .upload-image-loading.active {\n opacity: 1;\n background: ${({ theme }) => theme.palette.whiteSmoke};\n top: -1%;\n height: 110%;\n width: 110%;\n backdrop-filter: none;\n }\n\n .upload-image-loading .loading-bg {\n background: none;\n visibility: hidden;\n }\n\n .upload-image-container .upload-image #upload-image-drop-zone {\n ${acceptButton}\n &:after {\n content: '${({ tFunc }) => tFunc('picture-mode.ok-upload-cta') as string}';\n ${acceptButtonAfter};\n }\n }\n\n #upload-image-drop-zone {\n cursor: pointer;\n }\n\n img {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n height: 100%;\n transform: translate(-50%, -50%);\n object-fit: cover;\n }\n }\n`\n\nexport const StyledError = styled.div`\n margin: ${pxToEm(24)} 0 ${pxToEm(16)};\n text-align: center;\n`\n\nexport const ErrorLabel = styled.div`\n margin-top: ${pxToEm(16)};\n color: ${({ theme }) => theme.palette.pinkRed};\n font: ${({ theme }) => theme.fonts.paragraph};\n text-align: center;\n`\n\nexport const SeeInstructions = styled.div`\n text-decoration: underline;\n color: ${({ theme }) => theme.palette.black};\n font: ${({ theme }) => theme.fonts.span};\n cursor: pointer;\n`\n\nexport const StyledLink = styled.a`\n text-decoration: underline;\n font-weight: bold;\n cursor: pointer;\n`\n\nexport const PrivacyNotice = styled.div`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n font: ${({ theme }) => theme.fonts.paragraphSmall};\n color: ${({ theme }) => theme.palette.black};\n opacity: 0.5;\n padding: ${pxToEm(12)} ${pxToEm(40)};\n text-align: center;\n\n ${({ theme }) => theme.media.medium} {\n padding: 0 ${pxToEm(155)} ${pxToEm(47)};\n }\n`\n","import React, { useCallback, useEffect, useState } from 'react'\nimport {\n FrameAdvisorCapture,\n FrameAdvisorRegion,\n FrameAdvisorResult,\n InitializeParameters,\n} from '@luxottica/frame-advisor-capture'\n\nimport { useNavigate } from 'react-router'\nimport { useDispatch } from 'react-redux'\nimport { useConfig } from '@providers/configProvider'\n\nimport { default as appConfig } from '@config/index'\nimport { pictureMode, pictureModeView, uploadInstructions } from '@utils/routes'\nimport { setPictureId } from '@utils/sessionStorage'\n\nimport { setVisibilityTermsConditionsModal, setVtoPage } from '@store/actions/ui'\nimport { fallbackLanguage } from '@utils/language'\n\nexport const UPLOAD_CONTAINER = 'vm-picture-upload'\n\nconst useUpload = (ref: React.MutableRefObject) => {\n const config = useConfig()\n const {\n store: { region },\n vmInit: { environment, source },\n locale = fallbackLanguage(config),\n } = config\n\n const navigate = useNavigate()\n const dispatch = useDispatch()\n\n const [isTipsVisible, setTipsVisible] = useState(false)\n const [loading, setLoading] = useState(true)\n const [isError, setIsError] = useState(false)\n\n const [fileUploadRef, setFileUploadRef] = useState(null)\n const [uploadCtaContainer, setUploadCtaContainer] = useState(null)\n\n const [isInvalidImage, setIsInvalidImage] = useState(false)\n const [isFileChange, setIsFileChange] = useState(false)\n\n const onFileChange = useCallback((e: Event) => {\n const files = (e.target as HTMLInputElement).files\n\n if (!!files?.length) {\n const file = files[0]\n const fileType = file.type\n let isValid = true\n\n if (fileType.includes('image')) {\n setIsFileChange(true)\n setTipsVisible(false)\n\n const fReader = new FileReader()\n fReader.onload = () => {\n const img = new Image()\n\n img.onload = function () {\n if (img.width < 540) isValid = false\n if (img.height < 720) isValid = false\n\n if (!isValid) {\n setIsInvalidImage(true)\n } else setIsInvalidImage(false)\n }\n\n img.src = fReader.result as string\n }\n\n fReader.readAsDataURL(file)\n }\n }\n }, [])\n\n const toggleTipsVisible = useCallback(() => {\n const image = document.querySelector('.upload-image-display')\n\n if (image) {\n setTipsVisible(false)\n } else {\n setTimeout(\n () => {\n setTipsVisible(true)\n setLoading(false)\n },\n loading ? 2000 : 0\n )\n }\n }, [loading])\n\n const fileUploader = () => {\n const fileUpload = document.querySelector('#upload-image-file')\n const ctaContainer = document.querySelector('.upload-image-display-controls')\n\n if (fileUpload) {\n setFileUploadRef(fileUpload)\n }\n\n if (ctaContainer) setUploadCtaContainer(ctaContainer)\n }\n\n const buttonWrapper = () => {\n const image = document.querySelector('.upload-image-display')\n const container = document.querySelector('.upload-image-container')\n const uploadDropZone = document.querySelector('#upload-image-drop-zone')\n\n if (uploadDropZone && !uploadDropZone.classList.contains('uploadDropZone')) {\n uploadDropZone.classList.add('vm__instruction-cta-ok')\n }\n\n if (!image) {\n container?.classList.add('button-wrapper')\n } else {\n container?.classList.remove('button-wrapper')\n }\n }\n\n const enableLoader = () => {\n const loadingActive = document.querySelector('.upload-image-loading.active')\n if (loadingActive) {\n setLoading(true)\n }\n }\n\n const observerCallback = useCallback(() => {\n fileUploader()\n toggleTipsVisible()\n enableLoader()\n buttonWrapper()\n }, [toggleTipsVisible])\n\n const closeFaCapture = useCallback(\n (onResCb?: () => void) => {\n FrameAdvisorCapture.close()\n dispatch(setVtoPage('off'))\n onResCb?.()\n },\n [dispatch]\n )\n\n const seeInstructions = () => {\n FrameAdvisorCapture.closeUploadImage()\n setTipsVisible(true)\n setIsError(false)\n setIsInvalidImage(false)\n renderUploadImage()\n }\n\n const seePrivacyPolicyModal = () => {\n dispatch(setVisibilityTermsConditionsModal(true))\n }\n\n const generateUploadInitParams = useCallback(() => {\n // Use any due to impossible to import InternalInitializeParameters type, required for env variable\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const initOptions: InitializeParameters | any = {\n options: {\n locale: locale || 'en-US',\n environment: environment || appConfig.vmEnv,\n region: (region || 'US') as FrameAdvisorRegion,\n source: source,\n },\n callbacks: {\n onAdvisorResult: (result: FrameAdvisorResult) => {\n result && setPictureId(result.videoId || '')\n closeFaCapture()\n navigate(pictureMode(pictureModeView()), {\n state: { from: pictureMode(uploadInstructions()) },\n })\n },\n onCaptureError: () => {\n setLoading(false)\n setIsError(true)\n },\n },\n privacy: {\n termsAndConditions: 'javascript:void()',\n localizationText: 'javascript:void()',\n },\n }\n\n initOptions.auth = {\n accessToken: undefined,\n refreshToken: undefined,\n }\n return initOptions\n }, [locale, environment, region, source, closeFaCapture, navigate])\n\n const renderUploadImage = useCallback(() => {\n FrameAdvisorCapture.initialize(generateUploadInitParams())\n .then(initReturns => {\n if (!initReturns.isSupported) {\n // eslint-disable-next-line no-console\n console.error('The browser does not support a key feature for the experience')\n }\n FrameAdvisorCapture.uploadImage({\n target: UPLOAD_CONTAINER,\n options: {\n showLoading: false,\n enableVto: true,\n enableMachineLearning: false,\n },\n }).catch(error => {\n // eslint-disable-next-line no-console\n console.error({ error })\n })\n\n dispatch(setVtoPage('fa-upload'))\n })\n .catch(error => {\n // eslint-disable-next-line no-console\n console.error(error)\n })\n }, [dispatch, generateUploadInitParams])\n\n useEffect(() => {\n renderUploadImage()\n }, [renderUploadImage])\n\n useEffect(() => {\n if (fileUploadRef) {\n fileUploadRef.addEventListener('change', onFileChange)\n\n return () => {\n fileUploadRef?.removeEventListener('change', onFileChange)\n }\n }\n }, [fileUploadRef, onFileChange])\n\n useEffect(() => {\n // we need to make sure that the FA container mutated before setting the style\n if (uploadCtaContainer) {\n uploadCtaContainer.style.display = isInvalidImage ? 'none' : ''\n }\n }, [isInvalidImage, uploadCtaContainer])\n\n useEffect(() => {\n if (isFileChange) {\n const timer = setTimeout(() => {\n setIsFileChange(false)\n }, 1000)\n\n return () => clearTimeout(timer)\n }\n }, [isFileChange])\n\n useEffect(() => {\n const observer = new MutationObserver(observerCallback)\n\n if (ref.current) {\n observer.observe(ref.current, { childList: true, subtree: true })\n }\n\n return () => {\n observer.disconnect()\n }\n }, [observerCallback, ref])\n\n return {\n isFileChange,\n isInvalidImage,\n isError,\n loading,\n isTipsVisible,\n closeFaCapture,\n seeInstructions,\n seePrivacyPolicyModal,\n }\n}\n\nexport { useUpload }\n","import React, { useEffect, useRef } from 'react'\nimport { BackButton } from '@components/core/BackButton'\n\nimport { Loader } from '@components/Loader'\nimport { useTranslation } from 'react-i18next'\nimport { AlertIcon } from '@components/core/Icons'\nimport {\n StyledDiv,\n ErrorLabel,\n ButtonsContainer,\n TryAgainButton,\n SeeInstructions,\n StyledError,\n StyledLink,\n PrivacyNotice,\n} from './styles'\nimport { trackPicktureUploadFail, useFromPage } from '@libs/analytics'\nimport { UPLOAD_CONTAINER, useUpload } from '@hooks/useUpload'\nimport { useConfig } from '@providers/configProvider'\n\ninterface UploadButtonProps {\n setTipsVisible: (value: boolean) => void\n}\n\nexport const UploadButton: React.FC = ({ setTipsVisible }) => {\n const { t } = useTranslation()\n const containerRef = useRef(null)\n\n const from = useFromPage()\n const {\n isTipsVisible,\n isError,\n loading,\n isInvalidImage,\n isFileChange,\n closeFaCapture,\n seeInstructions,\n seePrivacyPolicyModal,\n } = useUpload(containerRef)\n\n const { termsAndConditions, onTermsAndConditionsClick } = useConfig()\n\n const isLoading = loading || isFileChange\n\n useEffect(() => {\n if (isError) {\n trackPicktureUploadFail()\n }\n }, [isError])\n\n useEffect(() => {\n setTipsVisible(isTipsVisible)\n }, [isTipsVisible, setTipsVisible])\n\n function openTermsAndConditions() {\n window.open(termsAndConditions, '_blank')\n }\n\n const onPrivacyNoticeClick = () => {\n return onTermsAndConditionsClick\n ? onTermsAndConditionsClick\n : termsAndConditions\n ? openTermsAndConditions\n : seePrivacyPolicyModal\n }\n\n const wrapTextWithTag = (sentence: string, keyword: string) => {\n const parts = sentence.split(keyword)\n const wrappedSentence = (\n <>\n {parts[0]}\n {keyword}\n {parts[1]}\n \n )\n return wrappedSentence\n }\n\n return (\n <>\n {isLoading && }\n {from && !isLoading && }\n\n \n {(isError || (isInvalidImage && !isLoading)) && (\n <>\n \n \n {isError && {t('picture-mode.picture-error')}}\n {isInvalidImage && {t('general.image-too-small')}}\n \n \n \n {t('picture-mode.try-again-cta')}\n \n \n {t('picture-mode.see-instructions-again')}\n \n \n \n )}\n {!isLoading && !isError && !isTipsVisible && !isInvalidImage && (\n \n {wrapTextWithTag(\n t('picture-mode.upload-photo-disclaimer'),\n t('picture-mode.privacy-notice')\n )}\n {/* \n I accept\n {\n dispatch(setVisibilityTermsConditionsModal(true))\n }}\n >\n privacy notice\n \n */}\n \n )}\n \n )\n}\n","import React, { useState } from 'react'\nimport { FaceShapeIcon, EyeglassesOffIcon, SunIcon, FocusIcon } from '@components/core/Icons'\nimport { useTranslation } from 'react-i18next'\nimport {\n PictureModeEntryPageWraper,\n Title,\n TitleWrapper,\n ParagraphDescriptionCentered,\n TipUpload,\n IconWrapper,\n TipsWrapper,\n TipDescription,\n} from '../styles'\nimport { UploadButton } from './UploadButton'\n\nconst UPLOAD_TIPS = [\n { text: 'upload-a-picture-suggestion-1', icon: },\n { text: 'upload-a-picture-suggestion-2', icon: },\n { text: 'upload-a-picture-suggestion-3', icon: },\n { text: 'upload-a-picture-suggestion-4', icon: },\n]\n\nexport const UploadInstructions: React.FC = () => {\n const { t } = useTranslation()\n const [isTipsVisible, setTipsVisible] = useState(false)\n\n return (\n \n \n {t('general.upload-a-picture-cta')}\n \n {isTipsVisible && (\n <>\n \n {t('picture-mode.upload-a-picture-subtitle')}\n \n \n {UPLOAD_TIPS.map((tip, index) => (\n \n {tip.icon}\n {t(`picture-mode.${tip.text}`)}\n \n ))}\n \n \n )}\n \n \n )\n}\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { CameraIcon, UploadIcon } from '@components/core/Icons'\nimport { useTranslation } from 'react-i18next'\nimport {\n PictureModeEntryPageWraper,\n Title,\n TitleWrapper,\n PictureModeAction,\n ActionIconWrapper,\n ParagraphDescriptionCentered,\n} from './styles'\nimport { BackButton } from '@components/core/BackButton'\nimport { useLocation, useNavigate } from 'react-router'\nimport {\n pictureMode,\n uploadInstructions,\n takePictureInstructions,\n pictureModeView,\n} from '@utils/routes'\nimport { trackClickTakePicture, trackClickUploadPicture, useFromPage } from '@libs/analytics'\nimport { setPrivacyAcceptedCookie, isPrivacyCookieAcceptedFromFa } from '@utils/cookies'\nimport { useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\nimport { useConfig } from '@providers/configProvider'\nimport { getPictureId } from '@utils/sessionStorage'\n\nexport const PictureModeEntryPage: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const from = useFromPage()\n const location = useLocation()\n const isPrivacyAccepted = useSelector((s: AppState) => s.privacyPolicy.isPrivacyAccepted)\n const { isUploadPictureEnabled, isTakePictureEnabled } = useConfig()\n const [isLoading, setIsLoading] = useState(true)\n\n useEffect(() => {\n if (isUploadPictureEnabled && isTakePictureEnabled) {\n return\n }\n\n if (isUploadPictureEnabled) {\n navigate(pictureMode(uploadInstructions()), { replace: true, state: { from } })\n }\n\n if (isTakePictureEnabled) {\n navigate(pictureMode(takePictureInstructions()), { replace: true, state: { from } })\n }\n }, [from, isTakePictureEnabled, isUploadPictureEnabled, navigate])\n\n useEffect(() => {\n if (isPrivacyAccepted && !isPrivacyCookieAcceptedFromFa()) {\n setPrivacyAcceptedCookie()\n }\n }, [isPrivacyAccepted])\n\n const onTakePicture = useCallback(() => {\n trackClickTakePicture()\n navigate(pictureMode(takePictureInstructions()), { state: { from: location.pathname } })\n }, [location, navigate])\n\n const onUploadPicture = useCallback(() => {\n trackClickUploadPicture()\n navigate(pictureMode(uploadInstructions()), { state: { from: location.pathname } })\n }, [location, navigate])\n\n useEffect(() => {\n const pictureId = getPictureId()\n if (pictureId) {\n navigate(pictureMode(pictureModeView()), {\n state: { from: pictureMode(uploadInstructions()) },\n })\n }\n setIsLoading(false)\n }, [navigate])\n\n if (isLoading) {\n return null\n }\n\n return (\n <>\n {from && }\n \n \n {t('general.picture-mode')}\n \n {t('picture-mode.subtitle')}\n \n \n \n \n \n {t('general.take-a-picture-cta')}\n \n \n \n \n \n \n \n {t('general.upload-a-picture-cta')}\n \n \n \n \n )\n}\n","import { pxToEm } from '@libs/styled'\nimport styled, { css } from 'styled-components'\n\nconst centeredFlexColumn = css`\n display: flex;\n flex-direction: column;\n align-items: center;\n`\n\nexport const PictureModeEntryPageWraper = styled.div`\n ${centeredFlexColumn}\n overflow: auto;\n width: 100%;\n height: 100%;\n color: ${({ theme }) => theme.palette.black};\n background: ${({ theme }) => theme.palette.whiteSmoke};\n padding: ${pxToEm(82)} ${pxToEm(24)} ${pxToEm(93)};\n ${({ theme }) => theme.media.medium} {\n overflow: unset;\n padding: ${pxToEm(80)} ${pxToEm(64)} ${pxToEm(93)};\n }\n ${({ theme }) => theme.media.large} {\n overflow: auto;\n padding: ${pxToEm(90)} ${pxToEm(48)} ${pxToEm(93)};\n }\n`\n\nexport const TitleWrapper = styled.div`\n margin-bottom: ${pxToEm(24)};\n ${({ theme }) => theme.media.medium} {\n margin-bottom: ${pxToEm(32)};\n margin-top: ${pxToEm(-40)};\n }\n`\n\nexport const Title = styled.h1`\n text-align: center;\n font: ${({ theme }) => theme.fonts.heading};\n font-size: ${pxToEm(20)};\n margin: 0;\n ${({ theme }) => theme.media.medium} {\n font-size: ${pxToEm(32)};\n }\n`\n\nexport const PictureModeAction = styled.div`\n ${centeredFlexColumn}\n margin-top: ${pxToEm(40)};\n ${({ theme }) => theme.media.medium} {\n margin-top: ${pxToEm(64)};\n }\n`\n\nexport const ActionIconWrapper = styled.div`\n width: ${pxToEm(80)};\n height: ${pxToEm(80)};\n box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2);\n background-color: var(--vm-components-action-photo-bg);\n border-radius: 50%;\n margin-bottom: ${pxToEm(16)};\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n svg,\n path {\n fill: var(--vm-components-action-photo-fill);\n }\n`\n\nexport const ParagraphDescription = styled.p`\n font: ${({ theme }) => theme.fonts.paragraph};\n`\n\nexport const ParagraphDescriptionCentered = styled(ParagraphDescription)`\n font: ${({ theme }) => theme.fonts.paragraph};\n text-align: center;\n margin: 0;\n`\n\nexport const TipsWrapper = styled.div`\n margin-bottom: ${pxToEm(20)};\n display: flex;\n flex-direction: column;\n`\n\nexport const TipUpload = styled.div`\n display: flex;\n align-items: center;\n margin-top: ${pxToEm(24)};\n\n ${({ theme }) => theme.media.medium} {\n margin-top: ${pxToEm(32)};\n }\n`\n\nexport const TipTake = styled.div`\n display: flex;\n align-items: center;\n margin-top: ${pxToEm(14)};\n\n ${({ theme }) => theme.media.medium} {\n margin-top: ${pxToEm(32)};\n }\n`\n\nexport const IconWrapper = styled.div`\n width: ${pxToEm(59.1)};\n height: ${pxToEm(60)};\n border: 1px solid ${({ theme }) => theme.palette.black};\n border-radius: 50%;\n margin-right: ${pxToEm(24)};\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: ${pxToEm(50)};\n\n ${({ theme }) => theme.media.medium} {\n width: ${pxToEm(60)};\n height: ${pxToEm(60)};\n min-width: ${pxToEm(60)};\n }\n`\n\nexport const TipDescription = styled.p`\n flex: 1;\n font: ${({ theme }) => theme.fonts.span};\n word-wrap: break-word;\n max-width: ${pxToEm(300)};\n margin: 0;\n\n ${({ theme }) => theme.media.medium} {\n font: ${({ theme }) => theme.fonts.paragraph};\n }\n`\n","import { Button } from '@components/core/Button'\nimport styled from 'styled-components'\nimport { pxToEm } from '@libs/styled'\nimport { resetButtonStyles } from '@components/Menu/styles'\n\nexport const Title = styled.h2`\n font: ${({ theme }) => theme.fonts.title};\n margin-bottom: ${pxToEm(40)};\n margin-top: ${pxToEm(15)};\n\n ${({ theme }) => theme.media.medium} {\n margin-top: ${pxToEm(30)};\n }\n`\n\nexport const ErrorMessage = styled.p`\n font: ${({ theme }) => theme.fonts.paragraph};\n color: ${({ theme }) => theme.palette.pinkRed};\n text-align: center;\n margin: ${pxToEm(5)} auto;\n max-width: ${pxToEm(300)};\n`\n\nexport const ConfirmButton = styled(Button)`\n margin-top: auto;\n padding: 0 ${pxToEm(29)};\n height: ${pxToEm(56)};\n border-radius: ${pxToEm(50)};\n background: ${({ theme }) => theme.palette.black};\n margin-bottom: ${pxToEm(15)};\n white-space: nowrap;\n`\n\nexport const SeeInstructions = styled.button`\n ${resetButtonStyles}\n text-decoration: underline;\n color: ${({ theme }) => theme.palette.black};\n font: ${({ theme }) => theme.fonts.span};\n`\n\nexport const PictureVideoErrorWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: ${pxToEm(25)};\n height: 100%;\n background-color: var(--vm-primary-white-100);\n\n ${({ theme }) => theme.media.medium} {\n padding: ${pxToEm(50)};\n }\n`\n","import { BackButton } from '@components/core/BackButton'\nimport { AlertIcon } from '@components/core/Icons'\nimport { useCallback } from 'react'\nimport { useNavigate } from 'react-router'\nimport { useQueryParams } from '@hooks/useQueryParams'\nimport { pictureMode, videoMode } from '@utils/routes'\nimport { useTranslation } from 'react-i18next'\nimport {\n Title,\n ErrorMessage,\n ConfirmButton,\n SeeInstructions,\n PictureVideoErrorWrapper,\n} from './styles'\n\nconst getSource = (from: string | null) => {\n switch (from) {\n case videoMode():\n return {\n takeNew: 'general.take-a-new-video',\n errorMessage: 'MIRROR.UI.VIDEO_DOESNT_FULFILL_REQUIREMENTS',\n }\n case pictureMode():\n return {\n takeNew: 'general.take-a-new-picture',\n errorMessage: 'picture-mode.picture-error',\n }\n default:\n return {\n takeNew: 'general.take-a-new-picture',\n errorMessage: 'picture-mode.picture-error',\n }\n }\n}\n\nexport const PictureVideoError: React.FC = () => {\n const navigate = useNavigate()\n const queryParams = useQueryParams()\n const { t } = useTranslation()\n\n const from = queryParams.get('from')\n const { takeNew, errorMessage } = getSource(from)\n\n const tryAgain = useCallback(() => {\n // go back 1 step to scan again\n navigate(-1)\n }, [navigate])\n\n const seeInstructions = useCallback(() => {\n // go back 2 step to see instruction\n // this will not remove the route state w/c state: { from: fromPath }\n navigate(-2)\n }, [navigate])\n\n return (\n <>\n \n \n {t('CORE.RENDER_ERROR.TITLE_1')}\n \n {t(`${errorMessage}`)}\n {t(`${takeNew}`)}\n \n {t('picture-mode.see-instructions-again')}\n \n \n \n )\n}\n","import React from 'react'\nimport { useLocation } from 'react-router'\n\nexport const useQueryParams = () => {\n const { search } = useLocation()\n return React.useMemo(() => new URLSearchParams(search), [search])\n}\n","import { Navigate } from 'react-router'\nimport { privacyPolicy } from '@utils/routes'\nimport { useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\n\ninterface ProtectedRouteProps {\n children: React.ReactNode\n}\nconst ProtectedRoute: React.FC = ({ children }) => {\n const isPrivacyAccepted = useSelector((s: AppState) => s.privacyPolicy.isPrivacyAccepted)\n if (!isPrivacyAccepted) {\n return \n }\n return <>{children}\n}\n\nexport default ProtectedRoute\n","import ApiService from './apiService'\nimport config from '@config/index'\nimport { VMData, VmHashData } from '@customTypes/vmData'\n\nconst apiService = new ApiService(config.vmApiUrl)\n\nclass VMApiService {\n private api: ApiService\n constructor(api: ApiService) {\n this.api = api\n }\n\n public generateHash = (data: VMData) => {\n return this.api.post('/api/virtualmirror', data)\n }\n}\n\nexport const vmApiService = new VMApiService(apiService)\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const StyledQRCode = styled.div<{ size: number; url: string }>`\n margin: 0 auto;\n height: ${({ size }) => pxToEm(size)};\n width: ${({ size }) => pxToEm(size)};\n background-color: ${({ theme }) => theme.palette.whiteSmoke};\n animation-name: ${({ url }) => (url ? 'none' : 'color')};\n animation-duration: 0.5s;\n animation-iteration-count: infinite;\n animation-timing-function: ease-in-out;\n animation-direction: alternate;\n border-radius: ${pxToEm(20)};\n\n @keyframes color {\n 0% {\n background-color: ${({ theme }) => theme.palette.whiteSmoke};\n }\n 100% {\n background-color: ${({ theme }) => theme.palette.whiteSmoke};\n }\n }\n\n canvas {\n border-radius: ${pxToEm(20)};\n }\n`\n","import {\n Boolean,\n Number,\n String,\n Literal,\n Array,\n Record,\n Union,\n Undefined,\n Optional,\n Null,\n} from 'runtypes'\n\nconst Analytics = Record({\n adobeSessionId: Optional(Union(String, Undefined)),\n pagePlatform: Optional(Union(String, Undefined)),\n pageBrand: Optional(Union(String, Undefined)),\n storeId: Optional(Union(String, Undefined)),\n sourcePosition: Optional(Union(String, Undefined)),\n pageEnvironment: Optional(Union(String, Undefined)),\n storeRegion: Optional(Union(String, Undefined)),\n storeCompany: Optional(Union(String, Undefined)),\n storeGlobalId: Optional(Union(String, Undefined)),\n source: Optional(Union(String, Undefined)),\n style: Optional(Union(String, Undefined)),\n})\n\nconst AvailableColor = Union(\n Literal('SIGNATURE-GEN8-AMBER'),\n Literal('SIGNATURE-GEN8-AMETHYST'),\n Literal('SIGNATURE-GEN8-BROWN'),\n Literal('SIGNATURE-GEN8-EMERALD'),\n Literal('SIGNATURE-GEN8-GRAY'),\n Literal('SIGNATURE-GEN8-GGREEN'),\n Literal('SIGNATURE-GEN8-SAPPHIRE'),\n Literal('XTRACTIVE-NEWGEN-BROWN'),\n Literal('XTRACTIVE-NEWGEN-GRAY'),\n Literal('XTRACTIVE-NEWGEN-GREEN'),\n Literal('XTRACTIVE-NEWGEN-GGREEN'),\n Literal('XTRACTIVE-GOLD-MIRROR'),\n Literal('XTRACTIVE-PINK-MIRROR'),\n Literal('XTRACTIVE-SILVER-MIRROR'),\n Literal('XTRACTIVE-RED-MIRROR'),\n Literal('XTRACTIVE-NEWGEN-GREEN-MIRROR'),\n Literal('XTRACTIVE-NEWGEN-BLUE-MIRROR'),\n Literal('XTRACTIVE-VANTAGE-POLARIZED'),\n Literal('SIGNATURE-GRAY'),\n Literal('SIGNATURE-BROWN'),\n Literal('SIGNATURE-GREEN'),\n Literal('SIGNATURE-SAPPHIRE'),\n Literal('SIGNATURE-AMETHYST'),\n Literal('SIGNATURE-EMERALD'),\n Literal('SIGNATURE-AMBER'),\n Literal('XTRACTIVE-GRAY'),\n Literal('XTRACTIVE-BROWN'),\n Literal('XTRACTIVE-GREEN'),\n Literal('0835C'),\n Literal('0834C'),\n Literal('0836C'),\n Literal('0838C'),\n Literal('0837C'),\n Literal('XTRACTIVE-POL-GRAY')\n)\n\nconst Brand = Record({\n name: String,\n logoUrl: String,\n})\n\nconst TransitionLens = Record({\n isEvolve: Optional(Boolean),\n defaultColor: Optional(String),\n defaultType: Optional(String),\n defaultAlphaLevel: Optional(Number),\n availableColors: Array(AvailableColor),\n})\n\nconst Product = Record({\n upc: String,\n code: String,\n name: String,\n colorCode: String,\n thumbnailUrl: String,\n brand: Brand,\n lensColorLabel: Optional(String),\n frameColorLabel: Optional(String),\n styleName: Optional(String),\n size: Optional(String),\n category: Optional(String),\n isCustom: Optional(Boolean),\n isTransition: Optional(Boolean),\n transitionLens: Optional(TransitionLens),\n})\n\nconst Store = Record({\n id: String,\n storeId: String,\n type: String,\n name: Optional(String),\n address: Optional(String),\n standAlone: Optional(Boolean),\n region: Optional(String),\n countryId: Optional(String),\n globalStoreId: Optional(String),\n})\n\nconst VtoMode = Record({\n isTryOnEnabled: Boolean,\n})\n\nexport const VMData = Record({\n store: Store,\n style: String,\n products: Array(Product),\n analytics: Analytics,\n glassesEnv: Optional(Union(String, Undefined, Null)),\n vmmvModes: Optional(VtoMode),\n})\n","import { useAsync } from '@hooks/useAsync'\nimport QRCodeStyling from 'qr-code-styling'\nimport { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { vmApiService } from '@services/vmApiService'\nimport config from '@config/index'\nimport { StyledQRCode } from './styles'\nimport { useConfig } from '@providers/configProvider'\nimport { VMData } from 'src/schemas/vmData'\nimport { Product } from '@customTypes/product'\nimport { AppState } from '@store/index'\nimport { useSelector } from 'react-redux'\n\nexport interface QRCodeProps {\n size?: number\n className?: string\n}\n\nexport const QRCode: React.FC = ({ size = 160 }) => {\n const ref = useRef(null)\n const { store, style, analytics, fromStore, vmInit, products, isTryOnEnabled } = useConfig()\n const { run, data } = useAsync(vmApiService.generateHash)\n const vmProducts: Product[] = useSelector((s: AppState) => s.products.vmProducts)\n\n const vmData = useMemo(\n () => ({\n store,\n style,\n products: vmProducts.length ? vmProducts : products,\n analytics,\n glassesEnv: vmInit.glassesEnv,\n vmmvModes: { isTryOnEnabled: isTryOnEnabled || false },\n }),\n [store, style, vmProducts, products, analytics, vmInit.glassesEnv, isTryOnEnabled]\n )\n\n const validateVMData = useCallback(() => {\n try {\n VMData.check(vmData)\n } catch (error) {\n throw new Error(\n 'Request payload data does not match the expected type. Check VMData and try again.'\n )\n }\n }, [vmData])\n\n useEffect(() => {\n if (!data) {\n validateVMData()\n run(vmData)\n }\n }, [data, run, validateVMData, vmData])\n\n const qrCode = useMemo(\n () =>\n new QRCodeStyling({\n width: size,\n height: size,\n qrOptions: {\n mode: 'Byte',\n errorCorrectionLevel: 'L',\n },\n dotsOptions: {\n type: 'square',\n color: '#000000',\n },\n cornersDotOptions: {\n type: 'square',\n color: '#000000',\n },\n cornersSquareOptions: {\n type: 'square',\n color: '#000000',\n },\n }),\n [size]\n )\n const url = `${config.vmUrl}?hash=${encodeURIComponent(data?.hash || '')}&fromStore=${fromStore}`\n useEffect(() => {\n if (ref.current) {\n qrCode.append(ref.current)\n }\n }, [qrCode])\n\n useEffect(() => {\n qrCode.update({\n data: data?.hash ? url : '',\n width: size,\n height: size,\n })\n }, [size, qrCode, data, url])\n\n return (\n \n
\n \n )\n}\n","import { Provider } from 'react-redux'\nimport { ThemeProvider } from 'styled-components'\nimport { Config } from '../types/config'\nimport { store } from '../store'\nimport { theme } from '../theme'\nimport { ErrorBoundary } from '@components/ErrorBoundary'\nimport { ConfigContext } from '@providers/configProvider'\nimport { QRCode } from '@components/QRCodeModal/QRCode'\n\ntype QrCodeUiProps = { config: Config }\n\nexport const QrCodeUi = (props: QrCodeUiProps) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n","import styled from 'styled-components'\nimport { pxToEm } from '@libs/styled'\nimport { resetButtonStyles } from '@components/Menu/styles'\n\nexport const RightSideActionsWrapper = styled.div`\n position: absolute;\n top: ${pxToEm(70)};\n right: ${pxToEm(14)};\n bottom: ${pxToEm(110)};\n display: flex;\n flex-direction: column;\n z-index: 1;\n min-width: ${pxToEm(32)};\n\n ${({ theme }) => theme.media.medium} {\n right: ${pxToEm(22)};\n }\n\n .transitions-simulation-slider-wrapper {\n &.vmmv-single-right-action {\n position: absolute;\n top: 23%;\n width: 100%;\n }\n }\n\n ${({ theme }) => theme.media.ipad['9.7']}, ${({ theme }) => theme.media.ipad['11']}, ${({\n theme,\n }) => theme.media.ipad['12.9']} {\n .transitions-simulation-slider-wrapper {\n position: absolute;\n top: 23%;\n width: 100%;\n }\n }\n`\n\nexport const ActionBtn = styled.button`\n ${resetButtonStyles}\n cursor: pointer;\n margin-bottom: ${pxToEm(35)};\n`\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const WishlistFilledIcon: React.FC = ({\n width = '1em',\n height = '1em',\n fill = 'none',\n stroke = '#fff',\n}) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { ActionBtn } from '@components/RightSIdeActions/styles'\nimport { useConfig } from '@providers/configProvider'\nimport { Product } from '@customTypes/product'\nimport { WishlistIcon } from '@components/core/Icons'\nimport { WishlistFilledIcon } from '@components/core/Icons/WishlistFilledIcon'\nimport { useWishlist } from '@hooks/useWishlist'\nimport { useAddToWishlist } from '@libs/analytics'\n\ninterface WishlistProps {\n currentProduct: Product\n}\n\nexport const Wishlist: React.FC = ({ currentProduct }) => {\n const { onToggleWishlist } = useConfig()\n const { wishlisted, toggleWishlist, pending } = useWishlist(currentProduct)\n const trackAddToWishlist = useAddToWishlist(currentProduct)\n\n const handleToggleWishlist = () => {\n toggleWishlist()\n !wishlisted && trackAddToWishlist()\n }\n\n if (!onToggleWishlist) return null\n\n return (\n \n {wishlisted ? (\n \n ) : (\n \n )}\n \n )\n}\n","import { Product } from '@customTypes/product'\nimport { useConfig } from '@providers/configProvider'\nimport { AppState } from '@store/index'\nimport { useCallback, useMemo, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { toggleWishlist as toggleWishlistAction } from '@store/actions/wishlist'\n\nexport const useWishlist = (currentProduct: Product) => {\n const { onToggleWishlist } = useConfig()\n const dispatch = useDispatch()\n const [pending, setPending] = useState(false)\n\n const wishlist = useSelector((s: AppState) => s.wishlist.wishlist)\n const wishlisted = useMemo(\n () => wishlist.includes(currentProduct.upc),\n [currentProduct.upc, wishlist]\n )\n\n const toggleWishlist = useCallback(async () => {\n try {\n setPending(true)\n onToggleWishlist && (await onToggleWishlist(currentProduct))\n dispatch(toggleWishlistAction(currentProduct.upc))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e)\n } finally {\n setPending(false)\n }\n }, [currentProduct, dispatch, onToggleWishlist, setPending])\n\n return {\n toggleWishlist,\n wishlist,\n wishlisted,\n pending,\n }\n}\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n position: relative;\n`\n\nexport const SliderWrapper = styled.div<{ isEvolve: boolean }>`\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: ${({ isEvolve }) => (isEvolve ? pxToEm(176) : pxToEm(194))};\n\n ${({ theme }) => theme.media.medium} {\n height: ${pxToEm(244)};\n }\n\n ${({ theme }) => theme.media.large} {\n height: ${pxToEm(300)};\n }\n\n ${({ theme }) => theme.media.ipad['9.7']} {\n height: ${pxToEm(350)};\n }\n\n ${({ theme }) => theme.media.ipad['11']} {\n height: ${pxToEm(380)};\n }\n\n ${({ theme }) => theme.media.ipad['12.9']} {\n height: ${pxToEm(400)};\n }\n\n @media only screen and (max-height: 655px) and (min-width: 1024px) {\n height: 35vh;\n }\n\n svg {\n &:first-child {\n margin-bottom: ${pxToEm(10)};\n }\n &:last-child {\n margin-top: ${pxToEm(10)};\n margin-bottom: ${pxToEm(15)};\n }\n }\n`\n\nexport const RangeTrackStyled = styled.div`\n display: flex;\n height: 100%;\n`\n\nexport const RangeTrackSelectedStyled = styled.div`\n height: 100%;\n width: ${pxToEm(2)};\n border-radius: ${pxToEm(5)};\n align-self: center;\n background-color: ${({ theme }) => theme.palette.white[100]};\n box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.35);\n`\n\nexport const RangeThumbStyled = styled.div`\n height: ${pxToEm(20)};\n width: ${pxToEm(20)};\n position: relative;\n padding: ${pxToEm(30)};\n outline: none;\n\n &::before,\n &::after {\n content: '';\n position: absolute;\n border-radius: 50%;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n &::before {\n height: ${pxToEm(14)};\n width: ${pxToEm(14)};\n background-color: ${({ theme }) => theme.palette.white[100]};\n }\n\n &::after {\n height: ${pxToEm(22)};\n width: ${pxToEm(22)};\n background-color: transparent;\n border: 2px solid ${({ theme }) => theme.palette.white[100]};\n }\n`\n\nexport const LabelStyled = styled.span`\n position: absolute;\n bottom: ${pxToEm(-29)};\n right: ${pxToEm(10)};\n color: ${({ theme }) => theme.palette.white[100]};\n font: ${({ theme }) => theme.fonts.span};\n white-space: nowrap;\n`\n","import { LightIcon, LightLessIcon } from '@components/core/Icons'\nimport { useAnimation } from '@hooks/useAnimationApp'\nimport { useInterval } from '@hooks/useInterval'\nimport { trackClickBrightnessBar } from '@libs/analytics'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Range, Direction } from 'react-range'\nimport {\n Wrapper,\n SliderWrapper,\n RangeThumbStyled,\n RangeTrackStyled,\n RangeTrackSelectedStyled,\n LabelStyled,\n} from './styles'\nimport { useVM } from '@providers/VmProvider'\n\ninterface LensActivationProps {\n isEvolve: boolean\n}\n\nconst MIN_VALUE = 0\nconst MAX_VALUE = 1\nconst STEP_VALUE = 0.1\n\nconst Label: React.FC = () => {\n const labelRef = useRef(null)\n\n useEffect(() => {\n setTimeout(() => {\n if (labelRef.current?.style) {\n labelRef.current.style.opacity = '0'\n }\n }, 3000)\n }, [])\n\n const { t } = useTranslation()\n return (\n \n {t('transitions.change-brightness')}\n \n )\n}\n\nconst LensActivationWithoutAnimation: React.FC = ({ isEvolve }) => {\n const { lensActivation: opacity, setLensActivation: onChangeLensOpacity } = useVM()\n\n const changeLensOpacity = useCallback(\n (numbers: number[]) => {\n onChangeLensOpacity(numbers[0])\n trackClickBrightnessBar()\n },\n [onChangeLensOpacity]\n )\n\n return (\n \n \n \n (\n \n {children}\n \n )}\n renderThumb={({ props }) => }\n />\n \n \n \n )\n}\n\n// Due to requirements animation time should be 4s.\n// Change 40 times per 4s, so every 100ms should execute 1 action\n// Change opacity from 1->0 and 0->1\n// Step = 1 / 40 = 0.025\nconst OPACITY_STEP = 0.025\nconst INTERVAL = 100\n\nexport const LensActivation: React.FC = props => {\n const { lensActivation: opacity, setLensActivation: onChangeLensOpacity } = useVM()\n const [animationName, setAnimationName] = useState<'increase' | 'decrease' | null>(null)\n\n const decreaseOpacity = useCallback(() => {\n setAnimationName('decrease')\n }, [])\n\n const onEnd = useCallback(() => {\n setAnimationName(null)\n }, [])\n\n const increaseOpacity = useCallback(() => {\n setAnimationName('increase')\n }, [])\n\n useAnimation(opacity === 1, opacity === 0, decreaseOpacity, onEnd, 'decreaseOpacity', 0)\n useAnimation(opacity === 0, opacity === 1, increaseOpacity, onEnd, 'increaseOpacity', 0)\n\n useInterval(() => {\n if (opacity === 0 || animationName !== 'decrease') return\n const nextOpacity = opacity - OPACITY_STEP >= 0 ? opacity - OPACITY_STEP : 0\n onChangeLensOpacity(nextOpacity)\n }, INTERVAL)\n\n useInterval(() => {\n if (opacity === 1 || animationName !== 'increase') return\n const nextOpacity = opacity + OPACITY_STEP <= 1 ? opacity + OPACITY_STEP : 1\n onChangeLensOpacity(nextOpacity)\n }, INTERVAL)\n\n return \n}\n","import { QRCodeIcon, RefreshIcon } from '@components/core/Icons'\nimport { Product } from '@customTypes/product'\nimport { isMobileView } from '@libs/utils'\nimport { useConfig } from '@providers/configProvider'\nimport { RightSideActionsWrapper, ActionBtn } from './styles'\nimport { Wishlist } from '@components/Wishlist'\nimport { LensActivation } from '@components/LensActivation'\nimport { useMemo } from 'react'\nimport { useVM } from '@providers/VmProvider'\n\ninterface RightSideActionsProps {\n product: Product\n className?: string\n onRefresh?: () => void\n enableWishlistCb?: boolean\n onQRCb?: () => void\n}\n\nexport const RightSideActions: React.FC = ({\n className,\n onRefresh,\n product,\n enableWishlistCb,\n onQRCb,\n}) => {\n const { currentProduct, isTransitionActive, isConfigurator, currentColor } = useVM()\n const isTransition = currentProduct?.isTransition || false\n const isEvolve = currentProduct?.transitionLens?.isEvolve || false\n\n const { isQrCodeEnabled, onToggleWishlist } = useConfig()\n\n const isShowFavToggle = enableWishlistCb && !!onToggleWishlist\n const isShowRefresh = !!onRefresh\n const isShowQR = isQrCodeEnabled && !isMobileView() && !!onQRCb\n\n const showTransitionsSlider =\n (isConfigurator && currentColor) || (isTransition && (isTransitionActive || isEvolve))\n\n const ctaCnt = useMemo(() => {\n let cnt = 0\n if (isShowFavToggle) cnt++\n if (isShowRefresh) cnt++\n if (isShowQR) cnt++\n\n return cnt\n }, [isShowFavToggle, isShowQR, isShowRefresh])\n\n return (\n \n {isShowFavToggle && }\n {onRefresh && (\n \n \n \n )}\n {isShowQR && (\n \n \n \n )}\n {showTransitionsSlider && (\n \n \n
\n )}\n \n )\n}\n","const colorMap: Record = {\n sunglasshut: '#000',\n sgh: '#000',\n to: '#222',\n lc: '#000',\n opsm: '#2a2f57',\n oo: '#2a2f57',\n rb: '#2a2f57',\n sv: '#2a2f57',\n mk: 'rgba(42, 47, 88, .6)',\n avenir: 'rgba(42, 47, 88, .6)',\n m4c: 'rgba(42, 47, 88, .6)',\n}\n\nexport const getColorFromStyle = (style: string) => ({\n infoColor: colorMap[style] || '#000',\n})\n","/* eslint-disable quotes */\nconst fontMap: Record = {\n sgh: 'HelveticaNeue',\n sunglasshut: 'HelveticaNeue',\n oo: 'Avenir, sans-serif',\n rb: 'Avenir, sans-serif',\n sv: 'Avenir, sans-serif',\n to: \"'HelveticaNeueforTarget-Rm', 'Helvetica Neue', 'HelveticaNeue', 'Helvetica Neue', Helvetica, Arial, sans-serif\",\n lc: 'sofia-pro, sans-serif',\n opsm: 'Avenir, sans-serif',\n m4c: 'Montserrat',\n mk: 'Gotham',\n avenir: 'Avenir, sans-serif',\n}\n\nexport const getFontFromStyle = (style: string) => fontMap[style] || 'sans-serif'\n\nexport const getDefaultFont = () => 'sans-serif'\n","import { Product, Brand } from '@customTypes/product'\nimport { Store } from '@customTypes/store'\nimport { Screenshot } from '@customTypes/screenshot'\nimport { getColorFromStyle } from './getColorFromStyle'\nimport { getFontFromStyle } from './getFontFromStyle'\nimport { isMobileView, isSmallMobileView } from './utils'\n\nimport rb from '../assets/rb-logo.svg'\nimport mk from '../assets/mk-logo.svg'\nimport oo from '../assets/oo-logo.svg'\nimport opsm from '../assets/opsm-logo.svg'\nimport sgh from '../assets/sgh-logo.svg'\nimport sv from '../assets/sv-logo.svg'\nimport to from '../assets/to-logo.svg'\nimport { LAYOUT_ID } from '@hooks/useDimensions'\n\nexport const getDefaultLogoPath = (code: string): string => {\n const logos: Record = {\n rb,\n mk,\n oo,\n opsm,\n sgh,\n sv,\n to,\n }\n return logos[code]\n}\n\nexport const getNoCacheBrandUrl = (style: string, brand: Brand, standAlone?: boolean) => {\n return ['sv', 'rb', 'sgh', 'oo', 'to', 'mk', 'opsm', 'lc'].includes(style) && !standAlone\n ? getDefaultLogoPath(style)\n : brand.logoUrl\n}\n\nexport const IMAGE_TYPE = 'image/jpeg'\nexport const IMAGE_QUALITY = 0.95\n\nconst createImage = (src: string): Promise => {\n return new Promise(function (resolve, reject) {\n const img = new Image()\n img.crossOrigin = 'anonymous'\n img.onload = () => resolve(img)\n img.onerror = reject\n img.src = src\n })\n}\n\ntype Line = {\n content: string\n x: number\n y: number\n}\n\nfunction wrapText(\n context: CanvasRenderingContext2D,\n text: string,\n x: number,\n y: number,\n maxWidth: number,\n lineHeight: number\n) {\n let lines: Line[] = []\n let words = text.split(' '),\n line = ''\n\n for (let i = 0; i < words.length; i++) {\n let test = words[i]\n let metrics = context.measureText(test)\n\n while (metrics.width > maxWidth) {\n // Determine how much of the word will fit\n test = test.substring(0, test.length - 1)\n metrics = context.measureText(test)\n }\n if (words[i] != test) {\n words.splice(i + 1, 0, words[i].substr(test.length))\n words[i] = test\n }\n\n test = line + words[i] + ' '\n metrics = context.measureText(test)\n\n if (metrics.width > maxWidth && i > 0) {\n lines = lines.concat({ content: line, x, y })\n line = words[i] + ' '\n y += lineHeight\n } else {\n line = test\n }\n }\n lines = lines.concat({ content: line, x, y })\n return lines\n}\n\nexport const createScreenshotCanvas = async (\n screenshot: Screenshot,\n product: Product,\n style: string,\n store?: Store,\n isMonobrand?: boolean\n): Promise => {\n const { thumbnailUrl, brand, name, alternativeThumbnailUrl } = product\n const font = getFontFromStyle(style)\n const { infoColor } = getColorFromStyle(style)\n const standAloneStore = store && store.standAlone\n const hasTemplateStyle = store && store.logo\n const noCacheBrandUrl = getNoCacheBrandUrl(style, brand, standAloneStore)\n const brandLogoUrl = hasTemplateStyle && store.logo ? store.logo : noCacheBrandUrl\n\n const brandName = !isMonobrand ? `${product.brand.name}\\n` : ''\n const productURL = alternativeThumbnailUrl || thumbnailUrl\n\n const [brandLogoEl, thumbnailEl, screenshotEl] = await Promise.all(\n [brandLogoUrl, productURL, screenshot.imgURI].map(createImage)\n )\n\n const container = document.getElementById(LAYOUT_ID)\n\n if (container !== null) {\n // set the size of the screenshot based on its container\n screenshotEl.width = container.offsetWidth\n screenshotEl.height = container.offsetHeight\n screenshotEl.style.objectFit = 'cover'\n screenshotEl.style.position = 'center'\n }\n\n const baseWidth = screenshotEl.width\n const canvasW = baseWidth\n const canvasH = screenshotEl.height\n const screenshotX = 0\n const screenshotY = 0\n const screenshotW = canvasW\n const screenshotH = canvasH\n\n // ******** CONSTANTS ******** //\n const padding = isMobileView() ? 16 : 24\n const modelNamePadding = isSmallMobileView() ? padding * 1.5 : padding * 2\n\n // wrapper\n const realWrapperWidth = baseWidth - padding * 2\n const realWrapperHeight = canvasH * 0.2\n\n const textH = realWrapperHeight * 0.16\n\n const cvs = document.createElement('canvas')\n\n cvs.width = canvasW\n cvs.height = canvasH\n\n const ctx = cvs.getContext('2d')\n\n if (ctx === null) throw new Error('2d canvas context non supported')\n\n ctx.textBaseline = 'top'\n\n // Background\n ctx.fillStyle = 'white'\n\n ctx.fillRect(0, 0, canvasW, canvasH)\n ctx.drawImage(screenshotEl, screenshotX, screenshotY, screenshotW, screenshotH)\n\n const modelNameFontSize = realWrapperHeight * 0.12 // safari doesn't support \"rem\" font in canvas\n const modelInfoFontSize = realWrapperHeight * 0.1\n\n // Brand Logo\n let brandDrawWidth = brandLogoEl.width\n let brandDrawHeight = brandLogoEl.height\n const brandLogoContainer = realWrapperHeight * 0.45\n const brandLogoHeight = brandLogoContainer - padding\n\n if (brandDrawHeight > brandLogoHeight) {\n // resize the logo\n const ratio = brandLogoHeight / brandDrawHeight\n brandDrawWidth = brandDrawWidth * ratio\n brandDrawHeight = brandDrawHeight * ratio\n }\n\n // if the width exceeds 180px\n if (brandDrawWidth >= 150) {\n const ratio = 150 / brandDrawWidth\n brandDrawWidth = brandDrawWidth * ratio\n brandDrawHeight = brandDrawHeight * ratio\n }\n\n // LENS\n let lensDrawWidth = thumbnailEl.width\n let lensDrawHeight = thumbnailEl.height\n const lensLogoContainer = realWrapperHeight * 0.55\n const lensLogoPad = 10\n const lensLogoHeight = lensLogoContainer - lensLogoPad * 2 // with 10px padding top/bottom\n\n if (lensDrawHeight > lensLogoHeight) {\n // resize the logo\n\n const ratio = lensLogoHeight / lensDrawHeight\n lensDrawWidth = lensDrawWidth * ratio\n lensDrawHeight = lensDrawHeight * ratio\n }\n\n // model name text lines\n let modelNameLines = wrapText(ctx, name + ' ', 0, 0, realWrapperWidth / 2.8, textH)\n\n if (modelNameLines.length === 0) {\n modelNameLines = [{ content: '', x: 0, y: 0 }]\n }\n\n // lens text lines\n const lensInfoText = `${brandName}${\n product.frameColorLabel ? product.frameColorLabel?.replace(';', ' ') + '\\n' : ''\n }${product.lensColorLabel ? product.lensColorLabel : ''}`\n const textLines = lensInfoText.split('\\n')\n\n let subtextLens: Line[] = []\n for (let i = 0; i < textLines.length; ++i) {\n subtextLens = subtextLens.concat(\n wrapText(ctx, textLines[i], 0, 0, realWrapperWidth / 2.8, textH)\n )\n }\n\n const wrapperHeight = realWrapperHeight\n\n const wrapperContentTopPositionLensText =\n canvasH - wrapperHeight + modelNamePadding + modelNameLines.length * textH\n\n // ******** LENS BOTTOM WRAPPER ******** //\n // const gradient = ctx.createRadialGradient(\n // canvasW / 2,\n // canvasH - wrapperHeight - padding,\n // 0,\n // canvasW / 2,\n // canvasH - wrapperHeight - padding,\n // 250\n // )\n\n // gradient.addColorStop(0, 'rgba(255, 255, 255, 0.55)')\n // gradient.addColorStop(1, 'rgba(255, 255, 255, 0.89)')\n\n ctx.fillStyle = 'white'\n ctx.fillRect(0, canvasH - wrapperHeight, canvasW, wrapperHeight)\n\n const contentX = padding * 1\n\n const subTextLensMap = subtextLens.map(({ content }) => content)\n\n for (let i = 0; i < subTextLensMap.length; ++i) {\n let h = textH * i\n\n ctx.fillStyle = infoColor\n ctx.font = `500 ${modelInfoFontSize}px ${font}`\n\n ctx.fillText(subTextLensMap[i], contentX, wrapperContentTopPositionLensText + h)\n }\n\n const modelNameY = canvasH - wrapperHeight + padding\n\n ctx.font = `bold ${modelNameFontSize}px ${font}`\n for (let i = 0; i < modelNameLines.length; ++i) {\n let h = textH * i\n\n ctx.fillStyle = infoColor\n\n ctx.fillText(modelNameLines[i].content, contentX, modelNameY + h)\n }\n\n // ******** BRAND IMAGE ******** //\n\n let brandHorPos = 0\n let brandVertPos = 0\n let lensHorPos = 0\n\n if (brandDrawWidth > lensDrawWidth) lensHorPos = (brandDrawWidth - lensDrawWidth) / 2\n else brandHorPos = (lensDrawWidth - brandDrawWidth) / 2\n\n if (brandLogoHeight > brandDrawHeight) brandVertPos = (brandLogoHeight - brandDrawHeight) / 2\n\n ctx.drawImage(\n brandLogoEl,\n canvasW - padding - brandDrawWidth - brandHorPos,\n canvasH - wrapperHeight + padding + brandVertPos,\n brandDrawWidth,\n brandDrawHeight\n )\n\n // ******** LENS IMAGE ******** //\n\n ctx.drawImage(\n thumbnailEl,\n canvasW - padding - lensDrawWidth - lensHorPos,\n canvasH - wrapperHeight + brandLogoContainer + lensLogoPad, // add lensLogoPad to add spacing between brand logo and frame logo\n lensDrawWidth,\n lensDrawHeight\n )\n\n return cvs\n}\n\nconst downloadCanvas = (screenshotCanvas: HTMLCanvasElement, product: Product) => {\n const dataUrl = screenshotCanvas.toDataURL(IMAGE_TYPE, IMAGE_QUALITY)\n const anchor = document.createElement('a')\n const filename = `${product.brand.name}_${product.name}`.replace(/[^a-z0-9]/gi, '_').toLowerCase()\n anchor.download = `${filename}.jpg`\n anchor.href = dataUrl\n anchor.style.visibility = 'hidden'\n document.body.appendChild(anchor)\n anchor.click()\n setTimeout(() => {\n document.body.removeChild(anchor)\n }, 0)\n}\n\nexport const saveScreenshot = async (\n screenshot: Screenshot,\n product: Product,\n style: string,\n store?: Store,\n isMonobrand?: boolean\n): Promise => {\n if (!product) throw new Error('UPC not found')\n\n const screenshotCanvas = await createScreenshotCanvas(\n screenshot,\n product,\n style,\n store,\n isMonobrand\n )\n downloadCanvas(screenshotCanvas, product)\n}\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const ImageWrapper = styled.div`\n position: relative;\n width: 70%;\n height: 40%;\n ${({ theme }) => theme.media.medium} {\n height: 50%;\n }\n\n ${({ theme }) => theme.media.large} {\n min-height: ${pxToEm(390)};\n max-height: ${pxToEm(390)};\n max-width: ${pxToEm(310)};\n }\n`\n\nexport const StyledImage = styled.img`\n width: 100%;\n max-height: 100%;\n object-fit: cover;\n\n ${({ theme }) => theme.media.large} {\n height: 100%;\n }\n`\n","import { SpinnerWrapper, Spinner } from '@components/PictureMode/TakePicture/styles'\nimport { Screenshot } from '@customTypes/screenshot'\nimport { useState } from 'react'\nimport { StyledImage, ImageWrapper } from './styles'\n\ninterface ScreenshotImageProps {\n image?: Screenshot\n}\n\nexport const ScreenshotImage: React.FC = ({ image }) => {\n const [imageLoading, setImageLoading] = useState(true)\n\n return (\n \n {imageLoading && (\n \n \n \n )}\n setImageLoading(false)} />\n \n )\n}\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\nimport { resetButtonStyles } from '@components/Menu/styles'\nimport { Button } from '@components/core/Button'\n\nexport const CloseBtn = styled.button`\n position: absolute;\n top: ${pxToEm(10)};\n right: ${pxToEm(10)};\n width: ${pxToEm(50)};\n height: ${pxToEm(50)};\n line-height: 0;\n cursor: pointer;\n\n ${resetButtonStyles}\n`\n\nexport const BackBtn = styled.button`\n position: absolute;\n top: ${pxToEm(10)};\n left: ${pxToEm(10)};\n width: ${pxToEm(50)};\n height: ${pxToEm(50)};\n line-height: 0;\n\n ${resetButtonStyles}\n`\n\nexport const ProductInfo = styled.p`\n color: ${({ theme }) => theme.palette.black};\n font: ${({ theme }) => theme.fonts.span};\n line-height: 1.25;\n text-align: center;\n\n ${({ theme }) => theme.media.medium} {\n font: ${({ theme }) => theme.fonts.paragraph};\n line-height: 1.25;\n }\n`\n\nexport const ProductName = styled.p`\n color: ${({ theme }) => theme.palette.black};\n font: ${({ theme }) => theme.fonts.span};\n line-height: 1.25;\n font-weight: 600;\n text-align: center;\n\n ${({ theme }) => theme.media.medium} {\n font: ${({ theme }) => theme.fonts.paragraph};\n line-height: 1.25;\n font-weight: 600;\n }\n`\n\nexport const BrandImage = styled.img`\n max-width: ${pxToEm(120)};\n max-height: ${pxToEm(60)};\n height: auto;\n margin: ${pxToEm(36)} 0 ${pxToEm(20)};\n\n ${({ theme }) => theme.media.medium} {\n max-width: ${pxToEm(160)};\n max-height: ${pxToEm(90)};\n }\n`\n\nexport const ActionBox = styled.div<{\n disabled?: boolean\n position?: string\n isDesktopView?: boolean\n}>`\n position: relative;\n display: flex;\n width: 100%;\n max-width: 100%;\n justify-content: ${({ isDesktopView, position }) => (isDesktopView ? 'center' : position)};\n align-items: center;\n padding: ${pxToEm(5)} 0;\n margin: 0 auto;\n white-space: nowrap;\n color: ${({ theme, disabled }) => (disabled ? theme.palette.darkGray : theme.palette.black)};\n font: ${({ theme }) => theme.fonts.paragraph};\n line-height: 2.25;\n\n ${({ theme }) => theme.media.medium} {\n font: ${({ theme }) => theme.fonts.paragraph};\n line-height: 2.25;\n justify-content: ${({ position }) => (position === 'start' ? 'end' : 'start')};\n }\n ${({ theme }) => theme.media.large} {\n justify-content: center;\n }\n svg {\n margin: 0 ${pxToEm(10)};\n height: ${pxToEm(18)};\n width: ${pxToEm(18)};\n }\n`\n\nexport const ActionStyled = styled.div`\n display: flex;\n align-items: center;\n cursor: pointer;\n`\n\nexport const ActionWrapper = styled.div`\n position: relative;\n display: flex;\n flex-direction: row;\n width: 100%;\n max-width: 75%;\n justify-content: space-between;\n align-items: center;\n font: ${({ theme }) => theme.fonts.span};\n\n ${({ theme }) => theme.media.medium} {\n max-width: 70%;\n gap: 30px;\n }\n`\nexport const ButtonWrapper = styled.div`\n display: flex;\n width: 100%;\n justify-content: center;\n align-items: center;\n margin: ${pxToEm(10)} 0;\n gap: ${pxToEm(9)};\n`\n\nexport const ActionButton = styled(Button)`\n font-family: var(--vm-default-font-medium);\n font-weight: 500;\n font-size: 14px;\n\n background: ${({ theme }) => theme.palette.primary.black[100]};\n color: ${({ theme }) => theme.palette.primary.white[100]};\n\n padding: ${pxToEm(17)} ${pxToEm(16)};\n margin: 0;\n min-width: ${pxToEm(167)};\n border-radius: ${pxToEm(50)};\n letter-spacing: 0.2px;\n line-height: 1.07;\n text-align: center;\n`\n\nexport const ErrorMessage = styled.span`\n // position: absolute;\n text-align: center;\n left: 0;\n right: 0;\n bottom: 0;\n color: ${({ theme }) => theme.palette.pinkRed};\n font: ${({ theme }) => theme.fonts.span};\n`\n\nexport const ScreenshotWrapper = styled.div`\n width: 100%;\n height: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: ${pxToEm(30)} 10%;\n overflow: auto;\n\n ${({ theme }) => theme.media.medium} {\n padding: ${pxToEm(80)} 10%;\n }\n\n ${ProductInfo} {\n margin-bottom: ${pxToEm(2)};\n }\n ${ProductName} {\n margin-bottom: ${pxToEm(2)};\n }\n`\n","import { CaretLeftIcon, CloseScreenshotIcon, SaveIcon, ShareIcon } from '@components/core/Icons'\nimport { Product } from '@customTypes/product'\nimport { useShare } from '@hooks/useShare'\nimport { trackClickSaveImg, useSharePhoto } from '@libs/analytics'\nimport { getNoCacheBrandUrl, saveScreenshot } from '@libs/saveScreenshot'\nimport { useConfig } from '@providers/configProvider'\nimport { useCallback, useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ScreenshotImage } from './ScreenshotImage'\nimport {\n ScreenshotWrapper,\n CloseBtn,\n ProductInfo,\n ProductName,\n BrandImage,\n ActionBox,\n ActionWrapper,\n ActionButton,\n ActionStyled,\n ErrorMessage,\n ButtonWrapper,\n BackBtn,\n} from './styles'\nimport { isDesktopView, isValidHttpUrl } from '@libs/utils'\nimport { useVM } from '@providers/VmProvider'\n\nconst Polaroid_Generic_Error = 'Something went wrong while generating your polaroid image.'\n\ninterface ScreenshotPreviewProps {\n product: Product\n}\n\nexport const ScreenshotPreview: React.FC = ({ product }) => {\n const { image, setImage, isConfigurator } = useVM()\n\n const { name, lensColorLabel, frameColorLabel, brand } = product\n const { t } = useTranslation()\n const { store, style, onShare, disableSavePolaroid, polaroid, isMonobrand } = useConfig()\n const { linkA, linkB } = polaroid || {}\n\n const { share, error, loading, imgDataUrl } = useShare(product, image)\n\n const frameLensLabel = () => {\n if (lensColorLabel && !frameColorLabel) {\n return product.lensColorLabel\n }\n if (frameColorLabel && !lensColorLabel) {\n return product.frameColorLabel\n }\n if (frameColorLabel && lensColorLabel) {\n return product.frameColorLabel + ' / ' + product.lensColorLabel\n }\n }\n\n const trackSharePhoto = useSharePhoto(product)\n\n const onClose = () => {\n if (setImage) setImage(undefined)\n }\n\n const onSave = useCallback(() => {\n trackClickSaveImg()\n if (image) {\n saveScreenshot(image, product, style, store, isMonobrand)\n }\n }, [image, product, style, store, isMonobrand])\n\n const onShareUrl = useCallback(() => {\n if (loading) return\n trackSharePhoto()\n share()\n }, [share, trackSharePhoto, loading])\n\n useEffect(() => {\n if (error) {\n // eslint-disable-next-line no-console\n console.error(error)\n }\n }, [error])\n\n const disableSave = !product || !image || !imgDataUrl\n const disableShare = loading || disableSave\n\n return (\n \n {isConfigurator ? (\n \n \n \n ) : (\n \n \n \n )}\n\n \n \n {onShare && !isDesktopView() && (\n \n \n {t('share.share')}\n \n \n \n )}\n {!disableSavePolaroid && (\n \n \n {t('share.save-image')}\n \n \n \n )}\n \n {onShare && !isDesktopView() && error && (\n {Polaroid_Generic_Error}\n )}\n \n {brand.name && !isMonobrand && {brand.name}}\n {name && {name}}\n {isMonobrand ? (\n <>\n {product.frameColorLabel && `${product.frameColorLabel}`}\n {product.lensColorLabel && `${product.lensColorLabel}`}\n \n ) : (\n {frameLensLabel()}\n )}\n\n \n {linkA && isValidHttpUrl(linkA.url) && (\n window.open(linkA.url, '_blank', 'noreferrer')}>\n {linkA.label}\n \n )}\n {linkB && isValidHttpUrl(linkB.url) && (\n window.open(linkB.url, '_blank', 'noreferrer')}>\n {linkB.label}\n \n )}\n \n \n )\n}\n","import { Screenshot } from '@customTypes/screenshot'\nimport { useConfig } from '@providers/configProvider'\nimport { useCallback, useEffect, useState } from 'react'\nimport { createScreenshotCanvas, IMAGE_QUALITY, IMAGE_TYPE } from '@libs/saveScreenshot'\nimport { Product } from '@customTypes/product'\nimport { addAnalyticsQueryParam } from '@libs/analytics'\n\nexport const useShare = (product: Product, image?: Screenshot | null) => {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(null)\n const [imgDataUrl, setImgDataUrl] = useState(null)\n const { onShare, store, style } = useConfig()\n\n function isValidURL(data: string) {\n const urlPattern = /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i\n return urlPattern.test(data)\n }\n\n // eslint-disable-next-line\n const isValidFile = (file: any) => file instanceof Blob || file instanceof File\n\n const getImgDataUrl = useCallback(async () => {\n if (!image) return\n const screenShot = await createScreenshotCanvas(image, product, style, store)\n const dataUrl = screenShot.toDataURL(IMAGE_TYPE, IMAGE_QUALITY)\n setImgDataUrl(dataUrl)\n setLoading(false)\n }, [image, product, style, store])\n\n useEffect(() => {\n getImgDataUrl()\n }, [getImgDataUrl])\n\n const share = async () => {\n if (!navigator.share) {\n setError('Your browser does not support share functionality')\n return\n }\n\n setLoading(true)\n\n try {\n if (!onShare) throw new Error('onShare function is null or undefined')\n if (!imgDataUrl) throw new Error('Image URL is null or undefined')\n\n // I commented this, there is a possibility that the image would be saved twice in integrator side\n // For example in VMMV Standalone the image was saved in the Azure Storage and return the URL where the user's image can be download\n // const shareDataResult = onShare(imgDataUrl, product)\n // if (!(shareDataResult instanceof Promise)) throw new Error('Data is not a promise')\n\n // we can validate if the onShare callback is a promise if the method `then` is not undefined\n // if `then` was undefined then the error will catch by try/catch\n await onShare(imgDataUrl, product).then(async shareData => {\n if (!shareData) throw new Error('Data is null or undefined.')\n\n if (typeof shareData === 'object') {\n // if (!shareData.text || !shareData.title || !shareData.files?.length) {\n // throw new Error('Invalid/Missing data for share options')\n // }\n if (!shareData.files?.length) {\n throw new Error('Invalid/Missing data for share options')\n }\n if (!isValidFile(shareData.files[0])) {\n throw new Error('Invalid File.')\n }\n return navigator.share({\n files: shareData.files,\n })\n } else if (typeof shareData === 'string') {\n if (!isValidURL(shareData)) throw new Error('Data is not a valid URL.')\n const sharedUrl = addAnalyticsQueryParam(shareData)\n return navigator.share({ url: sharedUrl })\n } else {\n setError('Data is not a promise or a valid URL.')\n }\n })\n } catch (error) {\n const { message, name } = error as Error\n if (name === 'AbortError') {\n // eslint-disable-next-line no-console\n console.log('Share operation was canceled by the user.')\n } else {\n // eslint-disable-next-line no-console\n console.log(error)\n setError(message ?? 'Something went wrong while generating your polaroid image.')\n }\n setLoading(false)\n return\n } finally {\n setLoading(false)\n }\n }\n\n return { share, error, loading, imgDataUrl }\n}\n","import { BipaPage, VirtualMirror } from '@luxottica/virtual-mirror'\nimport { useCallback, useEffect } from 'react'\n\nimport { useConfig } from '@providers/configProvider'\nimport { useRefValue } from '@hooks/useRefValue'\nimport { useVmInitParams } from '@hooks/useVmInitParams'\n\ninterface VMInitializeProps {\n setIsReady: (value: boolean) => void\n setIsVMInitialized: (value: boolean) => void\n onDisplayPage?: (page: BipaPage) => void\n children: React.ReactNode\n}\n\nexport const VMInitialize: React.FC = ({\n children,\n setIsReady,\n setIsVMInitialized,\n onDisplayPage,\n}) => {\n const config = useConfig()\n const vmInitParams = useVmInitParams(config, setIsReady, onDisplayPage)\n\n const initializeVirtualMirror = useCallback(async () => {\n try {\n await VirtualMirror.initialize(vmInitParams)\n setIsVMInitialized(true)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Error initializing virtual mirror: ${error}`)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [vmInitParams, setIsVMInitialized])\n const initVMRef = useRefValue(initializeVirtualMirror)\n\n useEffect(() => {\n initVMRef.current()\n }, [initVMRef])\n\n return <>{children}\n}\n","import {\n InitializationParams,\n PrivacyOptions,\n InitializationOptions,\n BipaFormData,\n MicroserviceEnvironment,\n BipaPage,\n} from '@luxottica/virtual-mirror'\nimport { Config } from '@customTypes/config'\nimport {\n trackVmInitClientError,\n trackVmPrivacyFail,\n trackVmPrivacyReject,\n trackVmWebcamUnaccessible,\n trackVmWebcamUnavailable,\n trackVmWasmUnsupported,\n trackGR,\n} from '@libs/analytics'\nimport { checkIsRegionUS, getRegion } from '@utils/region'\nimport { useDispatch } from 'react-redux'\nimport { setVisibilityTermsConditionsModal } from '@store/actions/ui'\nimport { setIsPrivacyAccepted } from '@store/actions/privacyPolicy'\nimport { useNavigate } from 'react-router'\nimport { liveTryOn } from '@utils/routes'\nimport { useEffect } from 'react'\nimport { default as appConfig } from '@config/index'\nimport { fallbackLanguage } from '@utils/language'\n\nexport const useVmInitParams = (\n config: Config,\n setIsReady: (isReady: boolean) => void,\n onDisplayPage?: (page: BipaPage) => void\n): InitializationParams => {\n const {\n store,\n vmInit,\n fromStore,\n onPrivacyReject,\n onPrivacyAgree,\n onPrivacyFail,\n onTermsAndConditionsClick,\n termsAndConditions,\n bipaPrefill,\n locale = fallbackLanguage(config),\n } = config\n\n const dispatch = useDispatch()\n const navigate = useNavigate()\n\n useEffect(() => {\n if (termsAndConditions && !termsAndConditions.match(/https?:\\/\\//))\n throw Error('Terms and conditions link must start with http(s):// prefix')\n }, [termsAndConditions])\n\n const openTermsConditions = () => dispatch(setVisibilityTermsConditionsModal(true))\n const privacyOptions: PrivacyOptions = {\n bipaActive: true,\n privacyPolicy: 'javascript:void()',\n termsAndConditions: termsAndConditions || 'javascript:void()',\n region: checkIsRegionUS(config) ? 'US' : getRegion(config),\n source: vmInit.source,\n bipaPrefill,\n }\n\n const analyticsConfig = {\n onGlassesOn: () => setIsReady(true),\n onGlassesOff: () => setIsReady(false),\n onInitializeError: trackVmInitClientError,\n onWebcamDenied: trackVmWebcamUnaccessible,\n onWebcamUnavailable: trackVmWebcamUnavailable,\n onMirrorWasmFailure: trackVmWasmUnsupported,\n // eslint-disable-next-line no-console\n onError: (e: string) => console.error(e),\n onGlassesRemovalStateChange: (state: { message: 'active' | 'detecting' | 'off' }) => {\n if (state.message === 'active') {\n trackGR()\n }\n },\n }\n\n const initOptions: InitializationOptions = {\n key: vmInit.key,\n channel: vmInit.channel,\n locale: locale || 'en-US',\n brand: vmInit.brand,\n sessionTimeout: !fromStore,\n storeId: store.id,\n storeRegion: getRegion(config),\n storeCompany: store.type,\n globalStoreId: store.globalStoreId,\n environment: (vmInit.environment || appConfig.vmEnv) as MicroserviceEnvironment,\n analyticsConfig,\n }\n return {\n options: initOptions,\n privacy: privacyOptions,\n privacyCallbacks: {\n onDisplayPage: (page: BipaPage) => {\n if (onDisplayPage) onDisplayPage(page)\n },\n onPrivacyFail: (error: Error) => {\n trackVmPrivacyFail()\n if (onPrivacyFail) {\n onPrivacyFail(error)\n }\n },\n onPrivacyReject: () => {\n navigate(liveTryOn())\n trackVmPrivacyReject()\n if (onPrivacyReject) {\n onPrivacyReject()\n }\n },\n onTermsAndConditionsClick:\n !termsAndConditions && !onTermsAndConditionsClick\n ? openTermsConditions\n : onTermsAndConditionsClick\n ? onTermsAndConditionsClick\n : undefined,\n onPrivacyAgree: (bipaFormData?: BipaFormData) => {\n dispatch(setIsPrivacyAccepted())\n if (onPrivacyAgree) {\n onPrivacyAgree(bipaFormData)\n }\n },\n },\n }\n}\n","import styled, { css } from 'styled-components'\nimport { pxToEm } from '@libs/styled'\n\nexport const VideoModeContainer = styled.div<{\n textCentered: boolean\n isLoading: boolean\n isDone: boolean\n}>`\n height: 100%;\n\n &.frame-advisor-root-style {\n .vto-capture-overlay {\n font: ${({ theme }) => theme.fonts.spanBold};\n width: 100%;\n height: 100%;\n\n .fa-nudging-guide,\n .fa-recording-guide {\n max-width: 90%;\n margin: 0 auto;\n font: ${({ theme }) => theme.fonts.spanBold};\n font-size: ${pxToEm(18)};\n color: ${({ theme }) => theme.palette.white[100]};\n text-shadow: 0 0 7px rgba(0, 0, 0, 0.44);\n\n ${({ textCentered }) =>\n textCentered &&\n `\n position: absolute;\n font-family: var(--vm-default-font);\n font-size: ${pxToEm(36)};\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n max-width: 80%;\n text-align: center;\n text-shadow: 0 0 7px rgba(0, 0, 0, 0.44);\n `}\n\n ${({ theme }) => theme.media.medium} {\n font-size: ${pxToEm(24)};\n ${({ textCentered }) =>\n textCentered &&\n `\n font-weight: bold; \n font-size: ${pxToEm(48)};\n `};\n }\n }\n\n #svg-placeholder {\n position: absolute;\n stroke-dasharray: 6 7;\n stroke: ${({ theme }) => theme.palette.white[100]};\n }\n\n .vto-capture-overlay-loading {\n background-color: rgba(0, 0, 0, 0.2);\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n }\n }\n }\n\n &.frame-advisor-root-style .loading-bg .loading-spinner-container {\n .loading-spinner {\n display: ${({ isDone, isLoading }) => (isDone && !isLoading ? 'none' : 'block')};\n }\n\n ${({ isLoading }) =>\n isLoading &&\n css`\n .loading-spinner {\n top: 45%;\n transform: translateX(-50%);\n }\n .loading-spinner,\n .loading-spinner:after {\n width: ${pxToEm(226)};\n height: ${pxToEm(226)};\n }\n `}\n }\n\n &.frame-advisor-root-style .vto-capture-overlay-loading-text {\n text-align: center;\n font-family: var(--vm-default-font);\n -webkit-text-stroke: unset;\n text-shadow: unset;\n position: absolute;\n z-index: 15;\n top: ${pxToEm(8)};\n margin-top: 0;\n left: 50%;\n transform: translate(-50%);\n\n ${({ theme }) => theme.media.large} {\n top: ${pxToEm(15)};\n }\n }\n`\n\nexport const ArrowsContainer = styled.div`\n display: flex;\n position: absolute;\n z-index: 15;\n top: ${pxToEm(31)};\n left: 50%;\n transform: translate(-50%);\n\n ${({ theme }) => theme.media.medium} {\n top: ${pxToEm(24)};\n }\n`\n\nexport const IconWrapper = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -70%);\n width: ${pxToEm(200)};\n height: ${pxToEm(200)};\n border-radius: ${pxToEm(200)};\n backdrop-filter: blur(20px);\n background-color: rgba(255, 255, 255, 0.3);\n display: flex;\n align-items: center;\n justify-content: center;\n\n polyline {\n @keyframes dash-check {\n 0% {\n stroke-dashoffset: -100;\n }\n 100% {\n stroke-dashoffset: 900;\n }\n }\n stroke-dasharray: 1000;\n stroke-dashoffset: -100;\n animation: dash-check 0.9s 0.35s ease-in-out forwards;\n }\n`\nexport const Arrow = styled.span<{ animationIndex: number; toRight: boolean }>`\n @keyframes arrows {\n 0% {\n opacity: 0.3;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n }\n display: block;\n width: ${pxToEm(24)};\n height: ${pxToEm(24)};\n transform: ${({ toRight }) => (toRight ? 'rotate(225deg)' : 'rotate(45deg)')};\n\n border-left: 7px solid ${({ theme }) => theme.palette.white[100]};\n border-bottom: 7px solid ${({ theme }) => theme.palette.white[100]};\n animation: arrows 1.5s infinite;\n animation-delay: ${({ animationIndex }) => `calc(${animationIndex}*0.15s)`};\n`\n\nexport const StyledCounter = styled.div`\n font-family: var(--vm-default-font);\n font-size: ${pxToEm(175)};\n font-weight: bold;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1;\n color: ${({ theme }) => theme.palette.white[100]};\n`\n","import { Arrow, ArrowsContainer, IconWrapper, StyledCounter, VideoModeContainer } from './styles'\nimport { useEffect, useState, useCallback } from 'react'\nimport { pictureVideoModeError, videoMode, videoModeView } from '@utils/routes'\nimport { BackButton } from '@components/core/BackButton'\nimport { useConfig } from '@providers/configProvider'\nimport { useDispatch } from 'react-redux'\nimport { useNavigate } from 'react-router'\nimport { trackVideoTakeFail, trackVmPrivacyFail, trackVmPrivacyReject } from '@libs/analytics'\nimport {\n FrameAdvisorCapture,\n FrameAdvisorRegion,\n FrameAdvisorResult,\n InitializeParameters,\n} from '@luxottica/frame-advisor-capture'\nimport { CheckIcon } from '@components/core/Icons'\nimport { useInterval } from '@hooks/useInterval'\nimport { default as appConfig } from '@config/index'\nimport { setVtoPage } from '@store/actions/ui'\nimport { setVideoId } from '@utils/sessionStorage'\nimport { fallbackLanguage } from '@utils/language'\n\nconst CONTAINER_ID = 'vm-video-mode'\n\nconst STEPS = ['STEP_1', 'STEP_2', 'STEP_3', 'STEP_4', 'STEP_5']\nconst ARROWS_NUMBER = 6\nconst ARROWS_ITEMS = Array(ARROWS_NUMBER).fill('')\nconst COUNTER_INTERVAL = 666\nconst COUNTER_MAX_VALUE = 3\n\nexport const VideoFaceScan = () => {\n const config = useConfig()\n const {\n store: { region },\n vmInit: { environment, source },\n locale = fallbackLanguage(config),\n } = config\n\n const navigate = useNavigate()\n const dispatch = useDispatch()\n\n const [isDone, setIsDone] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n\n const [counter, setCounter] = useState(COUNTER_MAX_VALUE)\n const [currentStep, setCurrentStep] = useState(null)\n\n const vtoCaptureClose = useCallback(\n (onResCb?: () => void) => {\n FrameAdvisorCapture.closeVtoCapture()\n dispatch(setVtoPage('off'))\n onResCb?.()\n },\n [dispatch]\n )\n\n useEffect(() => {\n if (isDone) {\n setTimeout(() => {\n setIsLoading(true)\n }, 2000)\n }\n }, [isDone])\n\n useEffect(() => {\n // Use any due to impossible to import InternalInitializeParameters type, required for env variable\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const initOptions: InitializeParameters | any = {\n options: {\n locale: locale || 'en-US',\n environment: environment || appConfig.vmEnv,\n region: (region || 'US') as FrameAdvisorRegion,\n source: source,\n },\n callbacks: {\n onCaptureError: () => {\n setIsDone(false)\n setCurrentStep(null)\n trackVideoTakeFail()\n vtoCaptureClose()\n navigate(`${videoMode(pictureVideoModeError())}?from=${videoMode()}`)\n },\n onAdvisorResult: (result: FrameAdvisorResult) => {\n setIsDone(false)\n result && setVideoId(result.videoId || '')\n FrameAdvisorCapture.close()\n FrameAdvisorCapture.closeVtoCapture()\n dispatch(setVtoPage('off'))\n navigate(videoMode(videoModeView()))\n },\n onVtoCaptureStep: ({ recordingStatus }: { recordingStatus: string }) => {\n setCurrentStep(STEPS.indexOf(recordingStatus))\n },\n onLoading: () => {\n setIsDone(true)\n },\n onPrivacyFail: trackVmPrivacyFail,\n onPrivacyReject: trackVmPrivacyReject,\n },\n privacy: {\n termsAndConditions: 'javascript:void()',\n localizationText: 'javascript:void()',\n },\n }\n\n initOptions.auth = {\n accessToken: undefined,\n refreshToken: undefined,\n }\n\n FrameAdvisorCapture.initialize(initOptions)\n .then(initReturns => {\n if (!initReturns.isSupported) {\n // eslint-disable-next-line no-console\n console.error('The browser does not support a key feature for the experience')\n }\n FrameAdvisorCapture.vtoCapture({\n target: CONTAINER_ID,\n options: {\n showLoading: true,\n enableVto: true,\n enableMachineLearning: false,\n },\n })\n\n dispatch(setVtoPage('fa-vto-capture'))\n })\n .catch(error => {\n // eslint-disable-next-line no-console\n console.error(error)\n })\n }, [navigate, dispatch, locale, environment, region, source, setCurrentStep, vtoCaptureClose])\n\n useInterval(() => {\n if (counter > 0 && currentStep === 0) {\n setCounter(c => c - 1)\n }\n }, COUNTER_INTERVAL)\n\n return (\n <>\n \n 0 : false}\n className=\"vmmv-video-face-scan frame-advisor-root-style\"\n id={CONTAINER_ID}\n />\n {!isDone && currentStep === 0 && counter > 0 && {counter}}\n {currentStep !== null && currentStep > 0 && !isDone && (\n \n {ARROWS_ITEMS.map((_, index) => (\n \n ))}\n \n )}\n {isDone && !isLoading && (\n \n \n \n )}\n \n )\n}\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const TitleWrapper = styled.div`\n margin-bottom: 0;\n ${({ theme }) => theme.media.medium} {\n margin-bottom: ${pxToEm(32)};\n }\n`\n\nexport const Title = styled.h1`\n font: ${({ theme }) => theme.fonts.heading};\n text-align: center;\n font-size: ${pxToEm(20)};\n max-width: ${pxToEm(250)};\n margin: 0;\n ${({ theme }) => theme.media.medium} {\n margin: 0 auto;\n font-size: ${pxToEm(32)};\n }\n`\n\nexport const VideoScanInstructionPageWraper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n height: 100%;\n overflow: auto;\n color: ${({ theme }) => theme.palette.black};\n background: ${({ theme }) => theme.palette.whiteSmoke};\n padding: ${pxToEm(82)} ${pxToEm(24)} ${pxToEm(93)};\n ${({ theme }) => theme.media.medium} {\n overflow: unset;\n padding: ${pxToEm(82)} ${pxToEm(64)} ${pxToEm(93)};\n }\n ${({ theme }) => theme.media.large} {\n overflow: auto;\n padding: ${pxToEm(82)} ${pxToEm(48)} ${pxToEm(93)};\n }\n`\n\nexport const VideoScanTipsWrapper = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: ${pxToEm(20)};\n`\n\nexport const Tip = styled.div`\n display: flex;\n align-items: center;\n margin-top: ${pxToEm(24)};\n\n ${({ theme }) => theme.media.medium} {\n margin-top: ${pxToEm(32)};\n }\n`\n\nexport const IconWrapper = styled.div`\n width: ${pxToEm(50)};\n height: ${pxToEm(50)};\n border: 1px solid ${({ theme }) => theme.palette.black};\n border-radius: 50%;\n margin-right: ${pxToEm(24)};\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: ${pxToEm(50)};\n\n ${({ theme }) => theme.media.medium} {\n width: ${pxToEm(60)};\n height: ${pxToEm(60)};\n min-width: ${pxToEm(60)};\n }\n`\n\nexport const TipDescription = styled.p`\n font: ${({ theme }) => theme.fonts.span};\n word-wrap: break-word;\n max-width: ${pxToEm(252)};\n margin: 0;\n\n ${({ theme }) => theme.media.medium} {\n font: ${({ theme }) => theme.fonts.paragraph};\n }\n`\n","import { useTranslation } from 'react-i18next'\nimport { BackButton } from '@components/core/BackButton'\nimport { FaceShapeIcon, SunIcon, TurnFaceIcon } from '@components/core/Icons'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useNavigate } from 'react-router'\nimport { videoMode, videoModeView, videoScan } from '@utils/routes'\nimport {\n VideoScanInstructionPageWraper,\n Title,\n TitleWrapper,\n VideoScanTipsWrapper,\n Tip,\n IconWrapper,\n TipDescription,\n} from './styles'\nimport { getVideoId } from '@utils/sessionStorage'\nimport { useFromPage } from '@libs/analytics'\nimport StickyButton from '@components/core/StickyButton'\n\nconst VIDEO_SCAN_TIPS = [\n { text: 'take-tips.light', icon: },\n { text: 'picture-mode.upload-a-picture-suggestion-2', icon: },\n { text: 'take-tips.look-straight-1', icon: }, // Icon should be change when will be available\n]\n\nexport const VideoScanInstructions: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const from = useFromPage()\n const [isLoading, setIsLoading] = useState(true)\n\n const onConfirm = useCallback(() => {\n navigate(videoMode(videoScan()))\n }, [navigate])\n\n useEffect(() => {\n const videoId = getVideoId()\n if (videoId) {\n navigate(videoMode(videoModeView()))\n }\n setIsLoading(false)\n }, [navigate])\n\n if (isLoading) {\n return null\n }\n\n return (\n <>\n {from && }\n \n \n {t('take-tips.title')}\n \n \n {VIDEO_SCAN_TIPS.map((tip, index) => (\n \n {tip.icon}\n \n \n ))}\n \n \n {t('general.ok-get-started')}\n \n \n \n )\n}\n","import React, { useCallback } from 'react'\nimport { CaretLeftIcon } from '@components/core/Icons'\nimport { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\nimport { useNavigate } from 'react-router'\nimport { isMobileView } from '@libs/utils'\n\nexport const BackButtonWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${pxToEm(10)};\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1;\n svg {\n cursor: pointer;\n }\n ${({ theme }) => theme.media.medium} {\n padding: ${pxToEm(24)};\n }\n`\n\ninterface BackButtonProps {\n fill?: string\n onBackAction?: (cb: () => void) => void\n shadow?: boolean\n}\n\nexport const BackButton: React.FC = ({ fill, onBackAction, shadow }) => {\n const navigate = useNavigate()\n const onClickBack = useCallback(() => {\n if (!onBackAction) {\n navigate(-1)\n return\n }\n onBackAction?.(() => navigate(-1))\n }, [navigate, onBackAction])\n\n return (\n \n \n \n )\n}\n","import React from 'react'\nimport { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\nimport { theme } from '../../theme'\n\ntype ButtonProps = {\n className?: string\n onClick?: (event: React.MouseEvent) => void\n disable?: boolean\n color?: string\n bgColor?: string\n txtColor?: string\n type?: 'button' | 'submit' | 'reset'\n children: React.ReactNode\n}\n\nconst StyledButton = styled('button')<{ color?: string }>`\n margin: 0 ${pxToEm(16)};\n display: flex;\n justify-content: center;\n align-items: center;\n height: ${pxToEm(56)};\n border: 1px solid transparent;\n font: ${({ theme }) => theme.fonts.span};\n color: ${({ color }) => (color ? color : theme.palette.white[100])};\n line-height: normal;\n text-align: inherit;\n background: linear-gradient(to right, ${theme.palette.white[70]}, ${theme.palette.white[40]});\n outline: none;\n cursor: pointer;\n border-radius: ${pxToEm(100)};\n`\n\nexport const Button: React.FC = ({ className, disable, children, type, ...props }) => (\n \n {children}\n \n)\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const DrawerContainer = styled.div<{ fullscreen: boolean }>`\n z-index: 4;\n position: absolute;\n top: ${({ fullscreen }) => (fullscreen ? 0 : pxToEm(20))};\n bottom: 0;\n left: 0;\n min-height: calc(100% - ${pxToEm(15)});\n height: auto;\n display: flex;\n align-items: flex-start;\n width: 100%;\n background-color: ${({ theme }) => theme.palette.white[100]};\n transition: transform 300ms ease-in-out;\n border-top-left-radius: ${({ fullscreen }) => (fullscreen ? 0 : pxToEm(15))};\n border-top-right-radius: ${({ fullscreen }) => (fullscreen ? 0 : pxToEm(15))};\n overflow: hidden;\n\n &,\n &.visible-enter {\n transform: translateY(100%);\n }\n\n &.visible-enter-active,\n &.visible-enter-done {\n transform: translateY(0%);\n }\n`\nexport const DrawerOverlay = styled.div<{ showOverlay: boolean }>`\n z-index: 1;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n min-height: 100%;\n overflow: hidden;\n background: rgba(0, 0, 0, 0.25);\n transition: 0.3s opacity ease-in-out;\n font-size: 16px;\n\n &,\n &.visible-enter {\n z-index: ${({ showOverlay }) => (showOverlay ? 1 : -1)};\n opacity: ${({ showOverlay }) => (showOverlay ? 1 : 0)};\n width: ${({ showOverlay }) => (showOverlay ? '100%' : 0)};\n height: ${({ showOverlay }) => (showOverlay ? '100%' : 0)};\n min-height: ${({ showOverlay }) => (showOverlay ? '100%' : 'none')};\n }\n\n &.visible-enter-active,\n &.visible-enter-done {\n opacity: 1;\n }\n`\n","import { DrawerContainer, DrawerOverlay } from './styles'\n\nimport { CSSTransition } from 'react-transition-group'\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { usePortalDiv } from '@hooks/usePortalDiv'\nimport { useVM } from '@providers/VmProvider'\n\nexport interface DrawerProps {\n onOverlayClick?: () => void\n className?: string\n unmountOnExit?: boolean\n showOverlay?: boolean\n children: React.ReactNode\n}\n\nexport const DrawerBaseContainer: React.FC = ({\n children,\n onOverlayClick,\n className,\n unmountOnExit = true,\n showOverlay = true,\n}) => {\n const { image, isConfigurator } = useVM()\n const visible = !!image\n\n return (\n <>\n \n {\n if (onOverlayClick) {\n onOverlayClick()\n }\n }}\n />\n \n \n \n {children}\n \n \n \n )\n}\n\nconst drawerClassName = 'drawer__container'\n\nexport const Drawer: React.FC = ({ children, ...props }) => {\n const divEl = usePortalDiv(drawerClassName)\n\n if (!divEl) return null\n\n return ReactDOM.createPortal(\n {children},\n divEl\n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const AlertIcon: React.FC = ({\n width = '20px',\n height = '20px',\n fill = '#e8415a',\n}) => {\n return (\n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\nexport const CloseIcon: React.FC = ({\n width = '1em',\n height = '1em',\n fill = '#fff',\n stroke = '#fff',\n filter = true,\n}) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\nexport const NavBarActionScan: React.FC = ({\n width = '1em',\n height = '1em',\n fill = '#fff',\n}) => {\n return (\n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\nexport const NavBarActionVideo: React.FC = ({\n width = '1em',\n height = '1em',\n fill = '#fff',\n stroke = 'none',\n}) => {\n return (\n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\nexport const NavBarActionPicture: React.FC = ({\n width = '1em',\n height = '1em',\n stroke = '#fff',\n}) => {\n return (\n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const WishlistIcon: React.FC = ({\n width = '1em',\n height = '1em',\n fill = 'none',\n stroke = '#fff',\n}) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\nexport const RefreshIcon: React.FC = ({\n width = '1em',\n height = '1em',\n fill = '#fff',\n}) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const ChooseLensIcon: React.FC = ({ width = '1em', height = '1em' }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const ChooseColorIcon: React.FC = ({ width = '1em', height = '1em' }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const ChooseFrameIcon: React.FC = ({ width = '1em', height = '1em' }) => {\n return (\n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const LightIcon: React.FC = ({ width = '1em', height = '1em' }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const LightLessIcon: React.FC = ({ width = '1em', height = '1em' }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const CameraIcon: React.FC = ({\n width = pxToEm(41),\n height = pxToEm(41),\n fill = '#000',\n}) => {\n return (\n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const UploadIcon: React.FC = ({\n width = pxToEm(32),\n height = pxToEm(32),\n fill = '#000',\n}) => {\n return (\n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const FaceShapeIcon: React.FC = ({\n width = pxToEm(30),\n height = pxToEm(30),\n fill = '#000',\n}) => {\n return (\n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const SunIcon: React.FC = ({\n width = pxToEm(30),\n height = pxToEm(30),\n fill = '#000',\n}) => {\n return (\n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const CaretLeftIcon: React.FC = ({\n width = pxToEm(32),\n height = pxToEm(34),\n fill = '#000',\n filter = true,\n}) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const CartIcon: React.FC = ({ width = '1em', height = '1em', fill = 'none' }) => {\n return (\n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { GlassesIcon } from './GlassesIcon'\n\nconst StyledContainer = styled.div`\n position: relative;\n`\n\nconst NoLine = styled.div`\n width: ${pxToEm(1)};\n height: ${pxToEm(30)};\n transform: rotate(45deg);\n background-color: ${({ theme }) => theme.palette.black};\n position: absolute;\n top: 0;\n left: 50%;\n`\n\nexport const NoGlassesIcon: React.FC = ({\n width = pxToEm(30),\n height = pxToEm(30),\n fill = '#000',\n}) => {\n return (\n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\nexport const ShareIcon: React.FC = ({\n width = '1em',\n height = '1em',\n fill = '#000',\n}) => {\n return (\n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\nexport const SaveIcon: React.FC = ({ width = '1em', height = '1em', fill = '#000' }) => {\n return (\n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\nexport const InfoIcon: React.FC = ({ width = '1em', height = '1em', fill = '#fff' }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const FocusIcon: React.FC = ({\n width = pxToEm(48),\n height = pxToEm(48),\n fill = '#000',\n}) => {\n return (\n \n \n \n \n )\n}\n","import React from 'react'\n\nexport const ArrowIcon: React.FC = () => {\n return (\n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const QRCodeIcon: React.FC = ({\n width = pxToEm(32),\n height = pxToEm(32),\n fill = '#fff',\n}: IconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const RotateIcon: React.FC = ({\n width = '36px',\n height = '36px',\n fill = '#fff',\n}) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const RotateIconDesktop: React.FC = ({\n width = '36px',\n height = '36px',\n fill = '#fff',\n}) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const MenuOpen: React.FC = ({ width = '35px', height = '28px' }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const MenuClose: React.FC = ({ width = '35px', height = '28px' }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\n\nexport const CloseScreenshotIcon: React.FC = ({\n width = '1em',\n height = '1em',\n fill = '#fff',\n stroke = '#fff',\n}) => {\n return (\n \n \n \n )\n}\n","import React from 'react'\n\nexport const CheckIcon: React.FC = () => {\n return (\n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const RelaxFaceIcon: React.FC = ({\n width = pxToEm(30),\n height = pxToEm(30),\n fill = '#000',\n}) => {\n return (\n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const EyeglassesOffIcon: React.FC = ({\n width = pxToEm(30),\n height = pxToEm(30),\n fill = '#000',\n}) => {\n return (\n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const HoldDeviceIcon: React.FC = ({\n width = pxToEm(30),\n height = pxToEm(30),\n fill = '#000',\n}) => {\n return (\n \n \n \n \n )\n}\n","import React from 'react'\n\nexport const TransitionIconReduced: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\n\nexport const TransitionsIcon: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { IconProps } from '@customTypes/icons'\nimport { pxToEm } from '@libs/styled'\nimport React from 'react'\n\nexport const TurnFaceIcon: React.FC = ({\n width = pxToEm(32),\n height = pxToEm(32),\n fill = '#000',\n}) => {\n return (\n \n \n \n )\n}\n","import styled from 'styled-components'\n\nexport const ModalWindowOverlay = styled.div`\n z-index: 1000;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n overflow: hidden;\n background: rgba(0, 0, 0, 0.25);\n font-size: 16px;\n`\n","import React from 'react'\nimport { usePortalDiv } from '@hooks/usePortalDiv'\nimport ReactDOM from 'react-dom'\nimport { ModalWindowOverlay } from '@components/core/Modal/styles'\n\ninterface ModalWindowProps {\n visible?: boolean\n onOverlayClick?: () => void\n children: React.ReactNode\n className?: string\n}\nconst modalWindowClassName = 'modal__container'\n\nconst ModalBaseContainer: React.FC = ({ visible, onOverlayClick, children }) => {\n if (!visible) return null\n\n return (\n <>\n \n {children}\n \n )\n}\n\nexport const Modal: React.FC = ({ children, className, ...props }) => {\n const divEl = usePortalDiv(modalWindowClassName)\n\n if (!divEl) return null\n\n return ReactDOM.createPortal(\n \n {children}\n ,\n divEl\n )\n}\n","import styled, { css } from 'styled-components'\nimport { pxToEm } from '@libs/styled'\n\nexport const Overlay = styled.div<{ toTop?: boolean; toBottom?: boolean }>`\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 50%;\n opacity: 0.55;\n background-image: linear-gradient(to right, #000 10%, rgba(0, 0, 0, 0) 96%);\n\n ${({ toTop }) =>\n toTop &&\n css`\n top: auto;\n height: ${pxToEm(250)};\n right: 0;\n background-image: linear-gradient(to top, #000 10%, rgba(0, 0, 0, 0) 96%);\n `}\n\n ${({ toBottom }) =>\n toBottom &&\n css`\n bottom: auto;\n height: ${pxToEm(250)};\n right: 0;\n background-image: linear-gradient(to bottom, #000 10%, rgba(0, 0, 0, 0) 96%);\n `}\n`\n","import { Overlay } from './styles'\n\nexport const OverlayWrapper: React.FC = () => {\n return (\n <>\n \n \n \n \n )\n}\n","import React from 'react'\nimport { OkCTA, StickyWrapper } from './styles'\n\nenum BGEnum {\n video = 'var(--vm-components-action-video-bg)',\n}\n\nenum ColorEnum {\n video = 'var(--vm-components-action-video-text)',\n}\n\ntype BtnBG = keyof typeof BGEnum\ntype BtnTxt = keyof typeof ColorEnum\n\ninterface StickyButtonProps {\n bgColor?: BtnBG\n color?: BtnTxt\n children: React.ReactNode\n onClick: () => void\n}\n\nconst StickyButton: React.FC = ({ bgColor, color, children, onClick }) => {\n return (\n \n \n {children}\n \n \n )\n}\n\nexport default StickyButton\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\nimport { Button } from '../Button'\n\nexport const StickyWrapper = styled.div`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background: ${({ theme }) => theme.palette.white[100]};\n height: ${pxToEm(93)};\n box-shadow: 0 -${pxToEm(14)} ${pxToEm(10)} -${pxToEm(8)} rgba(0, 0, 0, 0.12);\n\n // applicable to all ipads\n ${({ theme }) => theme.media.ipad['9.7']} {\n background: transparent;\n box-shadow: unset;\n height: ${pxToEm(25 + 93)};\n padding-bottom: ${pxToEm(25)};\n }\n`\n\nexport const OkCTA = styled(Button)`\n background: ${({ theme, bgColor }) => bgColor || theme.palette.primary.black[100]};\n color: ${({ theme, txtColor }) => txtColor || theme.palette.primary.white[100]};\n\n padding: 0 ${pxToEm(29)};\n width: fit-content;\n height: ${pxToEm(56)};\n border-radius: ${pxToEm(50)};\n margin: 0;\n`\n","import { Product } from '@customTypes/product'\nimport { useCallback, useMemo } from 'react'\nimport { useConfig } from '@providers/configProvider'\n// import { useAddToCart as useAddToCartAnalytics } from '@libs/analytics'\n\ninterface UseAddToCart {\n product: Product\n}\n\nexport const useAddToCart = ({ product }: UseAddToCart) => {\n const { prices, onAddToBag } = useConfig()\n\n const currentProductPrice = useMemo(() => {\n return prices?.find(p => p.upc === product.upc)\n }, [product.upc, prices])\n\n // const trackAddToCart = useAddToCartAnalytics(product, currentProductPrice)\n\n const addToCart = useCallback(() => {\n onAddToBag && onAddToBag(product)\n // trackAddToCart()\n }, [product, onAddToBag])\n\n return { addToCart, currentProductPrice }\n}\n","import { Product } from '@customTypes/product'\nimport { truncateString } from '@libs/truncateString'\nimport { useConfig } from '@providers/configProvider'\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nexport const useAlternativePath = (product: Product) => {\n const { alternativeDecisionPath, onAlternativeDecisionPath } = useConfig()\n const { t } = useTranslation()\n\n const alternativeDecision = useMemo(() => {\n const { title, text, cta, titleKey, textKey, ctaKey } = alternativeDecisionPath || {}\n\n if (\n !!onAlternativeDecisionPath &&\n product.rxAvailable &&\n (title || text || cta || titleKey || textKey || ctaKey)\n ) {\n const titleTxt = title || t(titleKey || '')\n const descTxt = text || t(textKey || '')\n const ctaTxt = cta || t(ctaKey || '')\n\n // use truncateString() for backward compatibility since it was handled by configuration validation\n return {\n alternativeTitle:\n !!titleTxt && titleTxt !== titleKey ? truncateString(titleTxt, 44) : undefined,\n alternativeText:\n !!descTxt && descTxt !== textKey ? truncateString(descTxt, 100) : undefined,\n alternativeCtaTxt: !!ctaTxt && ctaTxt !== ctaKey ? truncateString(ctaTxt, 24) : undefined,\n alternativeBtn: onAlternativeDecisionPath,\n }\n }\n\n return {}\n }, [alternativeDecisionPath, onAlternativeDecisionPath, product.rxAvailable, t])\n\n return { alternativeDecision, isAlternativePath: Object.keys(alternativeDecision).length > 0 }\n}\n","import { Queue } from '@customTypes/animationApp'\nimport {\n setCompleteAnimation,\n setCurrentAnimation,\n restartMenuAnimation,\n} from '@store/actions/animationApp'\nimport { AppState } from '@store/index'\nimport { useCallback, useEffect, useRef } from 'react'\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux'\n\nexport const useAnimationApp = () => {\n const { currentAnimation, isComplete, animationQueue } = useSelector(\n (s: AppState) => s.animationApp,\n shallowEqual\n )\n\n const dispatch = useDispatch()\n\n const setAnimation = useCallback(\n (animation: Queue | null) => {\n dispatch(setCurrentAnimation(animation))\n },\n [dispatch]\n )\n\n const completeAnimation = useCallback(() => {\n dispatch(setCompleteAnimation())\n }, [dispatch])\n\n const setNextAnimation = useCallback(() => {\n const next = animationQueue[0]\n if (!next) {\n completeAnimation()\n setAnimation(null)\n return\n }\n setAnimation(next)\n }, [animationQueue, setAnimation, completeAnimation])\n\n const resetMenuAnimation = useCallback(() => {\n dispatch(restartMenuAnimation())\n }, [dispatch])\n\n return {\n currentAnimation,\n isComplete,\n setAnimation,\n setNextAnimation,\n resetMenuAnimation,\n animationQueue,\n }\n}\n\nexport const useInitAnimationApp = () => {\n const { setAnimation, currentAnimation, animationQueue, isComplete, resetMenuAnimation } =\n useAnimationApp()\n\n useEffect(() => {\n if (!isComplete && !currentAnimation) {\n const firstAnimation = animationQueue[0]\n setAnimation(firstAnimation)\n }\n }, [currentAnimation, isComplete, animationQueue, setAnimation])\n\n return {\n resetMenuAnimation,\n }\n}\n\nexport const TIME_TO_SHOW = 3000 // Due to requirements\n\nexport const useAnimation = (\n conditionStart: boolean,\n conditionEnd: boolean,\n cbOnStart: () => void,\n cbOnEnd: () => void,\n animation: Queue,\n time = TIME_TO_SHOW\n) => {\n const timer = useRef | null>(null)\n const { currentAnimation, setNextAnimation } = useAnimationApp()\n\n const isAnimationMatch = currentAnimation === animation\n\n useEffect(() => {\n if (conditionStart && isAnimationMatch) {\n cbOnStart()\n }\n }, [conditionStart, cbOnStart, isAnimationMatch])\n\n useEffect(() => {\n if (conditionEnd && isAnimationMatch) {\n timer.current = setTimeout(() => {\n cbOnEnd()\n setNextAnimation()\n }, time)\n }\n }, [conditionEnd, setNextAnimation, cbOnEnd, isAnimationMatch, time])\n\n useEffect(() => {\n return () => {\n timer.current && clearTimeout(timer.current)\n timer.current = null\n }\n }, [])\n}\n","import { Dispatch, SetStateAction, useCallback, useState } from 'react'\n\ntype UseAsync = {\n error: boolean\n setError: Dispatch>\n loading: boolean\n setLoading: Dispatch>\n setData: Dispatch>\n run: (...args: I) => Promise\n data: O | null\n}\n\nexport const useAsync = (\n getFunction: (...args: I) => Promise\n): UseAsync => {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState(false)\n const [data, setData] = useState(null)\n\n const run = useCallback(\n async (...args: I) => {\n try {\n setLoading(true)\n const data = await getFunction(...args)\n if (!data) {\n throw new Error('Data not found')\n }\n setData(data)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log(error)\n setError(true)\n setData(null)\n } finally {\n setLoading(false)\n }\n },\n [getFunction]\n )\n return {\n error,\n setError,\n loading,\n setLoading,\n setData,\n run,\n data,\n }\n}\n","import { useState, useEffect, useRef } from 'react'\nimport { debounce } from 'lodash'\n\nexport const LAYOUT_ID = 'vm-layout'\nconst RESIZE_DELAY = 300\n\nconst getSelectorDimensions = (container: HTMLElement | null) => {\n if (!container) {\n return {\n width: undefined,\n height: undefined,\n }\n }\n\n const { offsetWidth: width, offsetHeight: height } = container\n\n return {\n width,\n height,\n }\n}\n\nexport const useDimensions = (elem?: HTMLElement | null) => {\n const container = useRef(document.getElementById(LAYOUT_ID))\n\n useEffect(() => {\n if (elem) {\n container.current = elem\n }\n }, [elem])\n\n const [selectorDimensions, setSelectorDimensions] = useState(\n getSelectorDimensions(container?.current)\n )\n\n useEffect(() => {\n function handleResize() {\n setSelectorDimensions(getSelectorDimensions(container?.current))\n }\n const debouncedHandleResize = debounce(handleResize, RESIZE_DELAY)\n\n window.addEventListener('resize', debouncedHandleResize)\n return () => window.removeEventListener('resize', debouncedHandleResize)\n }, [])\n return selectorDimensions\n}\n","import { useRef, useEffect } from 'react'\n\nexport const useInterval = (callback: () => void, delay: number) => {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const savedCallback = useRef<() => void>(() => {})\n\n useEffect(() => {\n savedCallback.current = callback\n }, [callback])\n\n useEffect(() => {\n function tick() {\n savedCallback.current()\n }\n\n const interval = setInterval(tick, delay)\n return () => clearInterval(interval)\n }, [delay])\n}\n","import { useDispatch, useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\nimport { setModalVisibility } from '@store/actions/ui'\n\nexport const useModal = () => {\n const dispatch = useDispatch()\n\n const isModalVisible = useSelector((s: AppState) => s.ui.isModalVisible)\n\n const toggleModalVisibility = () => {\n dispatch(setModalVisibility(!isModalVisible))\n }\n\n return {\n isModalVisible,\n toggleModalVisibility,\n }\n}\n","import { useCallback, useEffect } from 'react'\n\nenum OverlayContainer {\n vm = '.vm-swipeable-container #notification',\n vto = '.vto-swipeable-container .two-finger-overlay',\n}\n\ntype OverlayContainerType = keyof typeof OverlayContainer\n\nexport const useMoveGlassObserver = (isReady: boolean, className: OverlayContainerType) => {\n const selector = OverlayContainer[className]\n const showClassName = className === 'vto' ? 'visible' : 'show'\n\n const moveGlassesObserver = useCallback(() => {\n const overlay = document.querySelector(selector)\n\n // VM can open overlay every 2mins\n // VTO opens only at first touch\n if (overlay) {\n if (\n !overlay.classList.contains(showClassName) &&\n !overlay.classList.contains('overlay-hide')\n ) {\n // wait until animation finish then hide the overlay\n setTimeout(\n () => {\n overlay.classList.add('overlay-hide')\n },\n showClassName === 'visible' ? 3100 : 550\n )\n }\n }\n }, [selector, showClassName])\n\n const isMoveGlassesShow = useCallback(() => {\n const overlay = document.querySelector(selector)\n\n let isVisible = false\n if (overlay) {\n isVisible = overlay.classList.contains('visible')\n }\n\n return isVisible\n }, [selector])\n\n useEffect(() => {\n const observer = new MutationObserver(moveGlassesObserver)\n\n if (isReady) {\n const overlay = document.querySelector(selector)\n if (overlay) {\n // need to hide the overlay on top of VTO/VM swipeable container\n if (!overlay.classList.contains(showClassName)) {\n overlay.classList.add('overlay-hide')\n }\n observer.observe(overlay, { attributes: true })\n }\n }\n\n return () => {\n observer.disconnect()\n }\n }, [isReady, selector, showClassName, moveGlassesObserver])\n\n return {\n isMoveGlassesShow,\n }\n}\n","import { useEffect, useState } from 'react'\nimport { LAYOUT_ID } from './useDimensions'\n\nexport const usePortalDiv = (className = '') => {\n const [divEl, setDivEl] = useState()\n\n useEffect(() => {\n const layout = document.getElementById(LAYOUT_ID)\n const portalElement =\n document.querySelector(`.${className}`) ||\n layout?.appendChild(document.createElement('div', {}))\n portalElement?.classList.add(className)\n\n setDivEl(portalElement)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return divEl\n}\n","import { useEffect, useRef } from 'react'\n\nexport const useRefValue = (value: T): React.MutableRefObject => {\n const ref = useRef(value)\n useEffect(() => {\n ref.current = value\n })\n return ref\n}\n","import { useState, useEffect } from 'react'\nimport { Color, Product } from '@customTypes/product'\nimport { uniq } from 'lodash'\nimport { notUndefined } from '@libs/utils'\nimport { useUpcAvailability } from './useUpcAvailability'\nimport { AppState } from '@store/index'\nimport { useSelector } from 'react-redux'\nimport { useScreenshot } from './useScreenshot'\nimport { getAvailableColors } from '@utils/filterColors'\n\nexport const useVirtualMirrorApp = () => {\n // App\n const [isReady, setIsReady] = useState(false)\n const [isVMInitialized, setIsVMInitialized] = useState(false)\n const [isPreparingScreenshot, setIsPreparingScreenshot] = useState(false)\n const [isProductLoaded, setIsProductLoaded] = useState(false)\n const { image, setImage } = useScreenshot()\n const [isConfigurator, setIsConfigurator] = useState(false)\n\n // Products\n useUpcAvailability(isProductLoaded, setIsProductLoaded)\n const vmProducts: Product[] = useSelector((s: AppState) => s.products.vmProducts)\n const [currentProduct, setCurrentProduct] = useState(null)\n\n const changeUpc = (upc: string) => {\n const product = vmProducts.find(p => p.upc === upc)\n if (product) {\n setCurrentProduct(product)\n }\n }\n\n // Colors\n const [colors, setColors] = useState([])\n const [currentColor, setCurrentColor] = useState('')\n const [colorsCatalog, setColorsCatalog] = useState([])\n\n // Lenses\n const [currentLens, setCurrentLens] = useState()\n const [lensCatalog, setLensCatalog] = useState([])\n const [lensActivation, setLensActivation] = useState(1)\n\n const changeLens = (lens: string) => {\n setCurrentLens(lens)\n if (colorsCatalog.length > 0) {\n const colorsFilterByLens = colors.filter(color => color.lensName === lens)\n\n const colorsFiltered = getAvailableColors(currentProduct, colorsFilterByLens)\n\n if (colorsFiltered.length > 0) {\n setColorsCatalog(colorsFiltered)\n setCurrentColor(colorsFiltered[0].colorCode)\n }\n }\n }\n\n // UserId\n const [userId, setUserID] = useState('')\n\n // Transition view\n const [isTransitionActive, setTransitionActive] = useState(false)\n\n const toggleTransitionActive = () => {\n setTransitionActive(c => !c)\n }\n\n useEffect(() => {\n const selectedUpc = vmProducts.find(i => i.isSelected) || vmProducts[0]\n if (selectedUpc) {\n setCurrentProduct(selectedUpc)\n }\n }, [vmProducts])\n\n useEffect(() => {\n const debounce = setTimeout(() => {\n if (!isConfigurator) {\n const lenses = uniq(colors.map(c => c.lensName))\n\n const availColors = getAvailableColors(currentProduct, colors)\n\n const filteredLenses = lenses\n .filter(lens => availColors.some(color => color.lensName === lens))\n .filter(notUndefined)\n\n const currentLens = filteredLenses[0]\n\n const filteredColors = availColors.filter(color => color.lensName === currentLens)\n const color = filteredColors.length > 0 ? filteredColors[0]?.colorCode : ''\n setCurrentColor(color)\n setCurrentLens(currentLens)\n setColorsCatalog(filteredColors)\n setLensCatalog(filteredLenses)\n }\n }, 300)\n\n return () => {\n clearTimeout(debounce)\n }\n }, [isConfigurator, colors, currentProduct])\n\n return {\n isReady,\n isPreparingScreenshot,\n\n isVMInitialized,\n currentProduct,\n\n colors,\n currentColor,\n colorsCatalog,\n\n currentLens,\n lensCatalog,\n lensActivation,\n\n userId,\n\n isTransitionActive,\n\n vmProducts,\n isProductLoaded,\n image,\n isConfigurator,\n\n setIsReady,\n setIsVMInitialized,\n setIsPreparingScreenshot,\n\n setCurrentProduct,\n changeUpc,\n\n setColors,\n setCurrentColor,\n setColorsCatalog,\n\n setLensCatalog,\n setLensActivation,\n changeLens,\n\n setUserID,\n\n toggleTransitionActive,\n setImage,\n setIsConfigurator,\n }\n}\n","import { Screenshot } from '@customTypes/screenshot'\nimport { useState } from 'react'\n\nexport const useScreenshot = () => {\n const [image, setImage] = useState()\n\n return {\n image,\n setImage,\n }\n}\n","import React, { useCallback, useEffect, useMemo } from 'react'\nimport { useConfig } from '@providers/configProvider'\nimport { VirtualMirrorCatalogue } from '@luxottica/virtual-mirror'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\nimport { setVmProducts } from '@store/actions/products'\nimport { Product } from '@customTypes/product'\n\nexport const useUpcAvailability = (\n isProductLoaded: boolean,\n setIsProductLoaded: React.Dispatch>\n) => {\n const dispatch = useDispatch()\n\n const { products, vmInit } = useConfig()\n const vmProducts = useSelector((s: AppState) => s.products.vmProducts)\n\n const upcs = useMemo(() => {\n return products.map(p => p.upc)\n }, [products])\n\n const getIsUpcSupported = useCallback(async () => {\n let filteredProducts: Product[] = []\n\n try {\n const catalogueUpcs = await VirtualMirrorCatalogue.build({\n // Use any due to impossible to import GlassesEnvironment type, required for env variable\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...((vmInit.glassesEnv && { catalogueEnvironment: vmInit.glassesEnv }) as any),\n key: vmInit.key,\n }).isUpcSupportedImproved(...upcs)\n\n let availableList: string[] = []\n\n for (const upc of catalogueUpcs) {\n if (upc.isAvailable()) availableList.push(upc.getUpc())\n }\n\n filteredProducts = products.filter(p => availableList.includes(p.upc))\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Error checking if upc is supported ${error}`)\n }\n\n dispatch(setVmProducts(filteredProducts))\n setIsProductLoaded(true)\n }, [dispatch, products, setIsProductLoaded, upcs, vmInit.glassesEnv, vmInit.key])\n\n useEffect(() => {\n if (!isProductLoaded) {\n if (!!upcs.length && !vmProducts.length) {\n getIsUpcSupported()\n } else setIsProductLoaded(true)\n }\n }, [getIsUpcSupported, isProductLoaded, setIsProductLoaded, upcs, vmProducts])\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport { BackendModule, ReadCallback, ResourceLanguage } from 'i18next'\n\nimport { merge } from 'lodash'\n\ninterface BackendOptions {\n /**\n * array of existing i18next backends from https://www.i18next.com/plugins-and-utils.html#backends\n */\n backends?: BackendModule[]\n /**\n * array of options in order of backends above\n */\n backendOptions?: unknown[]\n}\n\nexport function createClassOnDemand(ClassOrObject: {} | (() => void)) {\n if (!ClassOrObject) return null\n if (typeof ClassOrObject === 'function') return new ClassOrObject()\n return ClassOrObject\n}\n\nexport function isResourceLanguage(data: any): data is ResourceLanguage {\n return !!data && Object.keys(data).length > -1\n}\n\nclass I18NextMergeBackend implements BackendModule {\n static type = 'backend'\n type: 'backend' = 'backend'\n services: any\n backends: BackendModule[]\n options: BackendOptions\n\n constructor(services?: any, options: BackendOptions = {}) {\n this.backends = []\n this.options = merge({}, options)\n this.init(services, options)\n }\n\n init(services?: any, options: BackendOptions = {}, i18nextOptions?: any) {\n this.services = services\n this.options = merge(this.options || {}, options)\n\n this.options.backends &&\n this.options.backends.forEach((b, i) => {\n this.backends[i] = this.backends[i] || createClassOnDemand(b)\n const backendOption = this.options.backendOptions && this.options.backendOptions[i]\n this.backends[i].init(services, backendOption, i18nextOptions)\n })\n }\n\n async read(language: string, namespace: string, callback: ReadCallback) {\n const results = await Promise.all(\n this.backends.map(\n backend =>\n new Promise(resolve => {\n backend.read(language, namespace, (err, data) => {\n if (err) {\n return resolve(null)\n }\n\n if (isResourceLanguage(data)) {\n if (backend.save) {\n backend.save(language, namespace, data)\n }\n\n resolve(data)\n }\n\n resolve(null)\n })\n })\n )\n )\n\n const validResults = results.filter(isResourceLanguage)\n\n if (validResults.length > 0) {\n const mergedResult = merge({}, ...validResults)\n callback(null, mergedResult)\n } else {\n callback(new Error('none of the backend loaded data'), false)\n }\n }\n\n create(languages: string[], namespace: string, key: string, fallbackValue: string) {\n this.backends.forEach(b => {\n if (b.create) b.create(languages, namespace, key, fallbackValue)\n })\n }\n}\n\nexport default I18NextMergeBackend\n","import i18next, { InitOptions } from 'i18next'\nimport { merge } from 'lodash'\nimport { initReactI18next, useTranslation } from 'react-i18next'\nimport HttpBackend from 'i18next-http-backend'\nimport Backend from './utils/I18NextMergeBackend'\nimport { Config } from '@customTypes/config'\n\nimport config from './config'\nimport { useConfig } from '@providers/configProvider'\nimport { useCallback, useState } from 'react'\n\nimport { getPictureId, getVideoId } from '@utils/sessionStorage'\nimport { isPrivacyCookieAccepted } from '@utils/cookies'\nimport { fallbackLanguage } from '@utils/language'\n\nconst DEFAULT_NS = 'application'\n\nconst getEnv = (env: string) => {\n const envs: Record = {\n ACCEPTANCE: 'test',\n STAGING: 'dev',\n PRODUCTION: 'prod',\n }\n return envs[env] || 'prod'\n}\n\nconst getResourceUrl = () => {\n const env = getEnv(config.vmEnv)\n const baseUrl =\n config.baseUrl && config.baseUrl.endsWith('/') ? config.baseUrl : `${config.baseUrl}/`\n\n return [\n `${config.translationPath}/vmmv/v1/${env}/application/{{ns}}_{{lng}}.json` || '',\n `${config.translationPath}/vto/v1/${env}/ui/{{ns}}_{{lng}}.json` || '',\n `${config.translationPath}/vmmv/v1/${env}/ui/{{ns}}_{{lng}}.json` || '',\n `${config.translationPath}/vmmv/v1/${env}/privacy/{{ns}}_{{lng}}.json` || '',\n `${baseUrl}locales/{{lng}}/{{ns}}.json`,\n ]\n}\n\nconst getInitConfig = (config: Config): InitOptions => {\n return {\n lng: config.locale,\n ns: [DEFAULT_NS],\n defaultNS: DEFAULT_NS,\n fallbackLng: fallbackLanguage(config),\n debug: true,\n load: 'currentOnly',\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n }\n}\n\nconst initI18n = (config: Config) => {\n const i18n = i18next.createInstance()\n const { experience } = config\n let i18nOptions = getInitConfig(config)\n\n const { isTryOnEnabled, isPictureModeEnabled, isVideoModeEnabled } = config\n const pictureId = getPictureId()\n const videoId = getVideoId()\n\n // load translation if live try on is disabled and if PP is accepted - this will redirect to either picture mode or video mode instruction\n // if a has a picture or video then load the translation after VTO initialize otherwise load the translation imediately because it would land in the instruction page\n const loadTranslation =\n (isTryOnEnabled === false || (!!experience && experience !== 'live-try-on')) &&\n isPrivacyCookieAccepted() === true &&\n ((isPictureModeEnabled && !pictureId) || (isVideoModeEnabled && !videoId))\n\n if (loadTranslation) {\n const backendConfig = {\n backends: [HttpBackend, HttpBackend, HttpBackend, HttpBackend, HttpBackend],\n backendOptions: getResourceUrl().map(u => ({ loadPath: u })),\n debounceInterval: 2000,\n }\n\n i18nOptions = { ...i18nOptions, backend: backendConfig as object }\n i18n.use(Backend).use(initReactI18next).init(i18nOptions)\n } else {\n i18nOptions = {\n ...i18nOptions,\n resources: {},\n react: {\n useSuspense: false,\n },\n }\n i18n.use(initReactI18next).init(i18nOptions)\n }\n\n return i18n\n}\n\nexport const useI18nInstance = () => {\n const config = useConfig()\n return initI18n(config)\n}\n\nexport const useTranslationInit = () => {\n const { i18n } = useTranslation()\n const config = useConfig()\n\n const [isTranslationLoaded, setIsTranslationLoaded] = useState(false)\n\n const initTranslation = useCallback(async () => {\n const fallbackLocale = fallbackLanguage(config)\n\n // if initial locale is undefined\n const locale = config.locale || fallbackLocale\n\n const fetchTranslation = (u: string, locale: string) => {\n const url = u.replace('{{lng}}', locale).replace('{{ns}}', DEFAULT_NS)\n return fetch(url).then(r => r.json())\n }\n\n // if initial locale is invalid use fallback\n const fetchFallback = (u: string) => fetchTranslation(u, fallbackLocale)\n\n const data = i18n.getResourceBundle(locale, DEFAULT_NS)\n\n // code guard, only if translation is empty, then refetch\n if (!data) {\n // add resources\n const resourceData = await Promise.all(\n getResourceUrl().map(u => fetchTranslation(u, locale).catch(() => fetchFallback(u)))\n )\n\n const mergeTranslation = merge({}, ...resourceData)\n i18n.addResourceBundle(locale, DEFAULT_NS, mergeTranslation)\n\n // eslint-disable-next-line no-console\n console.log('i18n', 'translation loaded after VM or VTO initialize')\n }\n\n setIsTranslationLoaded(true)\n }, [config, i18n])\n\n return {\n isTranslationLoaded,\n initTranslation,\n }\n}\n","import { VirtualMirror } from '@luxottica/virtual-mirror'\n\nconst addQueryParamsToUrl = (url: string, params: string[]) => {\n const [origin, query] = url.split('?')\n if (!query) {\n return `${url}?${params.join('&')}`\n }\n return `${origin}?${[query, ...params].join('&')}`\n}\n\nexport const getVmVersion = () => {\n const ver = VirtualMirror.version()\n return ver.replace('v', '')\n}\n\nexport const addAnalyticsQueryParam = (url: string) => addQueryParamsToUrl(url, ['CID=IT-WVM'])\n\n/**\n * The returned function is executed only once and the result is\n * * @param {string}\n * * @returns {string}\n */\nconst executedList: Record = {}\nexport function executeOnce(\n cb: (...args: Args) => Return,\n id: string\n) {\n return (...args: Args): Return => {\n const hasBeenExecuted = id in executedList\n if (hasBeenExecuted) return executedList[id] as Return\n\n const returnedValue = cb(...args)\n executedList[id] = returnedValue\n return returnedValue\n }\n}\n","import config from '@config/index'\nimport { Product } from '@customTypes/product'\nimport { getVmVersion } from './utils'\n\nexport type Sources = typeof sources[keyof typeof sources]\nexport type Ids = typeof ids[keyof typeof ids]\nexport type ValueTypes = typeof valueTypes[keyof typeof valueTypes]\nexport type LensTypes = typeof lensTypes[keyof typeof lensTypes]\nexport type ProductStatus = typeof productStatus[keyof typeof productStatus]\nexport type FrameTypes = typeof frameTypes[keyof typeof frameTypes]\nexport type Category = typeof category[keyof typeof category]\nexport type TakeMode = typeof takeMode[keyof typeof takeMode]\nexport type Sections = typeof sections[keyof typeof sections]\n\nexport interface ErrorData {\n id?: Ids\n Error_Source?: Sources // \"Server\" if error generated or managed by server side, \"Client\" if error generated by code in page usually for a catched JS error or unexpected error/behavior of page/content\n Error_Code: string\n Error_Details: string // alphanumeric - Error cause/source. Must specify details to drive IT through an exact fix\n}\n\ninterface ClickData {\n id?: Ids\n data_element_id: string\n data_analytics_available_call?: ValueTypes\n}\n\ninterface BaseEventData {\n id?: Ids\n Take_Mode?: TakeMode\n Vm_Release?: string\n}\n\ninterface DefaultImpressionData {\n id?: Ids\n Page_Section1?: Sections\n Page_Section2: string\n}\n\ntype ProductUpc = {\n Category: Category // SUN, OPTICS\n FrameType: FrameTypes\n}\n\ntype CartProductUpc = ProductUpc & {\n LensType: LensTypes\n Price: string // i.e. \"113.60\". Displayed final price per unit (-product discount, -prod insurance)\n PriceFull: string // i.e. \"142.00\". Displayed list price per unit before any discount\n Status?: ProductStatus // PIM stock status properties\n}\n\nexport type DefaultProduct = Record // UPC Number\ntype CartProduct = Record\n\ninterface CartEventData extends BaseEventData {\n Events_CartAdd: ValueTypes\n Products: CartProduct\n}\n\ninterface WishlistEventData extends BaseEventData {\n Events_ProdFavAdd: ValueTypes\n Products: DefaultProduct\n}\n\ninterface ShareEventData extends BaseEventData {\n Events_SocialShare: ValueTypes\n}\n\ninterface ScreenshotEventData extends BaseEventData {\n Events_VMScreenshot: ValueTypes\n}\n\ninterface FitGlassesEventData extends BaseEventData {\n Events_VMFit: ValueTypes\n}\n\ninterface VirtualMirrorImpressionData extends DefaultImpressionData {\n Events_VMRender: ValueTypes\n Products: DefaultProduct\n}\n\nexport type ImpressionData = VirtualMirrorImpressionData\n\nexport type EventData =\n | CartEventData\n | WishlistEventData\n | ShareEventData\n | ScreenshotEventData\n | FitGlassesEventData\n\nexport type Data = ErrorData | ClickData | EventData | ImpressionData\n\ndeclare global {\n interface Window {\n tealium_data2track: Array\n utag_data: {\n tealium_visitor_id?: string\n tealium_session_id?: string\n Page_Environment?: string\n Page_Platform?: string\n Page_Brand?: string\n Page_Country?: string\n Store_Id?: string\n utag_env?: string\n utag_plt?: string\n utag_brnd?: string\n utag_strid?: string\n utag_strrgn?: string\n }\n }\n}\n\nexport const takeMode = {\n vto: 'vto',\n video: 'video',\n picture: 'picture',\n pictureUpload: 'picture upload',\n} as const\n\nexport const valueTypes = {\n Positive: '1',\n Negative: '0',\n} as const\n\nexport const ids = {\n Click: 'Click',\n Impression: 'Impression',\n Event: 'Event',\n Error: 'Error',\n} as const\n\nexport const sources = {\n Client: 'Client',\n User: 'User',\n Server: 'Server',\n} as const\n\nexport const category = {\n Sun: 'SUN',\n Optics: 'OPTICS',\n} as const\n\nexport const frameTypes = {\n Std: 'STD',\n Cp: 'CP',\n} as const\n\nexport const lensTypes = {\n Plano: 'PLANO',\n} as const\n\nexport const productStatus = {\n Available: 'Available',\n} as const\n\nexport const sections = {\n VirtualMirror: 'VirtualMirror',\n} as const\n\nexport const getCategory = (product: Product) => {\n return product.category?.toLowerCase()?.includes('sun') ? category.Sun : category.Optics\n}\n\nexport const getFrameType = (product: Product) => {\n return product.isCustom ? frameTypes.Cp : frameTypes.Std\n}\n\nexport const formatAnalyticsProducts = (products: Product[]): DefaultProduct => {\n return products.reduce((acc, pr) => {\n const id = pr.isCustom ? pr.code : pr.upc\n return { ...acc, [id]: { Category: getCategory(pr), FrameType: getFrameType(pr) } }\n }, {})\n}\n\nconst track = (data: Data) => {\n if (config.debugAnalytics) {\n // eslint-disable-next-line no-console\n console.trace(data)\n }\n if (window.tealium_data2track) {\n window.tealium_data2track.push(data)\n }\n}\n\nexport const trackAttribute = (data: ClickData) => track({ ...data, id: ids.Click })\n\nexport const trackClientError = (data: ErrorData) =>\n track({ ...data, id: ids.Error, Error_Source: sources.Client, Vm_Release: getVmVersion() })\n\nexport const trackUserError = (data: ErrorData) =>\n track({ ...data, id: ids.Error, Error_Source: sources.User, Vm_Release: getVmVersion() })\n\nexport const trackEvent = (data: EventData) =>\n track({ ...data, id: ids.Event, Vm_Release: getVmVersion() })\n\nexport const trackOnload = (data: ImpressionData) =>\n track({\n ...data,\n id: ids.Impression,\n Page_Section1: sections.VirtualMirror,\n Vm_Release: getVmVersion(),\n })\n\nexport const trackServerError = (data: ErrorData) =>\n track({ ...data, id: ids.Error, Error_Source: sources.Server, Vm_Release: getVmVersion() })\n","import { Product } from '@customTypes/product'\nimport { category, frameTypes, TakeMode } from './helpers'\nimport { getVmVersion } from './utils'\n\n// URL for all ENV\nconst ROOT_URL = 'https://collect.tealiumiq.com/event'\n\nconst sendtrackData = >(data: I) => {\n const json = JSON.stringify(data)\n fetch(ROOT_URL, { headers: { 'Content-type': 'application/json' }, method: 'post', body: json })\n}\n\nconst getCommonData = (event: string) => {\n return {\n tealium_account: 'luxottica', // Value from analytics\n tealium_profile: 'vmmaster', // Value from analytics\n tealium_datasource: '6dcmo7', // Value from analytics\n tealium_event: event,\n tealium_visitor_id: window?.utag_data?.tealium_visitor_id || '',\n tealium_session_id: window?.utag_data?.tealium_session_id || '',\n page_environment: window?.utag_data?.Page_Environment || window?.utag_data?.utag_env || '',\n page_platform: window?.utag_data?.Page_Platform || window?.utag_data?.utag_plt || '',\n page_brand: window?.utag_data?.Page_Brand || window?.utag_data?.utag_brnd || '',\n country_code: window?.utag_data?.Page_Country || window?.utag_data?.utag_strrgn || '',\n url: location.href || '',\n domain: location.hostname || '',\n store_id: window?.utag_data?.Store_Id || window?.utag_data?.utag_strid || '',\n }\n}\n\nconst getClickData = (label: string) => {\n const commonData = getCommonData('Click')\n return { ...commonData, click_label: label }\n}\n\nconst formatEventData = (products: Product[]) => {\n return products.reduce(\n (acc, pr) => {\n acc.product_id.push(pr.upc)\n acc.product_category.push(pr.category || category.Sun)\n acc.product_frametype.push(pr.isCustom ? frameTypes.Cp : frameTypes.Std)\n return acc\n },\n { product_id: [], product_category: [], product_frametype: [] } as {\n product_id: string[]\n product_category: string[]\n product_frametype: string[]\n }\n )\n}\n\nconst getEventData = (products: Product[], takeMode: TakeMode, event: string) => {\n const formattedEventData = formatEventData(products)\n const commonData = getCommonData(event)\n return {\n ...commonData,\n ...formattedEventData,\n take_mode: takeMode,\n vm_version: getVmVersion(),\n }\n}\n\nconst getErrorData = (source: string, code: string, details: string) => {\n const commonData = getCommonData('error')\n return {\n ...commonData,\n error_source: source,\n error_code: code,\n error_details: details,\n vm_version: getVmVersion(),\n }\n}\n\nexport const trackClickComponentData = (label: string) => {\n const clickData = getClickData(label)\n sendtrackData(clickData)\n}\n\nexport const trackEventComponentData = (products: Product[], takeMode: TakeMode, event: string) => {\n const eventData = getEventData(products, takeMode, event)\n sendtrackData(eventData)\n}\n\nexport const trackErrorComponentData = (source: string, code: string, details: string) => {\n const errorData = getErrorData(source, code, details)\n sendtrackData(errorData)\n}\n\nexport const trackComponentEvent = (event: string) => {\n sendtrackData({ ...getCommonData(event), vm_version: getVmVersion() })\n}\n","import { trackErrorComponentData } from './componentTracking'\nimport { trackClientError, trackUserError, trackServerError, sources } from './helpers'\n\n//* Virtual Mirror\n// onPrivacyFail\nexport const trackVmPrivacyFail = () => {\n const code = 'Vm - Fail'\n const details = 'Privacy process failed due to network errors'\n trackClientError({\n Error_Code: code,\n Error_Details: details,\n })\n trackErrorComponentData(sources.Client, code, details)\n}\n\n// onPrivacyReject\nexport const trackVmPrivacyReject = () => {\n const code = 'Vm - Reject'\n const details = 'Biometric data consent rejected'\n trackUserError({\n Error_Code: code,\n Error_Details: details,\n })\n trackErrorComponentData(sources.User, code, details)\n}\n\n// onInitializeError - Client\nexport const trackVmInitClientError = () => {\n const code = 'Vm - Initialize'\n const details = 'Smth went wrong'\n trackClientError({\n Error_Code: code,\n Error_Details: details,\n })\n trackErrorComponentData(sources.Client, code, details)\n}\n\n// onWebcamUnavailable\nexport const trackVmWebcamUnavailable = () => {\n const code = 'Vm - Webcam'\n const details = 'Webcam not found'\n trackUserError({\n Error_Code: code,\n Error_Details: details,\n })\n trackErrorComponentData(sources.User, code, details)\n}\n// onWebcamDenied\nexport const trackVmWebcamUnaccessible = () => {\n const code = 'Vm - Webcam'\n const details = 'Webcam access was rejected by user'\n trackUserError({\n Error_Code: 'Vm - Webcam',\n Error_Details: 'webcam access was rejected by user',\n })\n trackErrorComponentData(sources.User, code, details)\n}\n// onMirrorWasmFailure\nexport const trackVmWasmUnsupported = () => {\n const code = 'Vm - Render'\n const details = 'Smth went wrong'\n trackClientError({\n Error_Code: code,\n Error_Details: details,\n })\n trackErrorComponentData(sources.Client, code, details)\n}\n\n//* Picture mode\n// on Upload fail\nexport const trackPicktureUploadFail = () => {\n const code = 'Vm - PicUpload'\n const details = 'Failed to upload picture'\n trackServerError({\n Error_Code: code,\n Error_Details: details,\n })\n trackErrorComponentData(sources.Server, code, details)\n}\n\n// on taken picture fail\nexport const trackPicktureTakeFail = () => {\n const code = 'Vm - Picture'\n const details = 'Failed taking a picture'\n trackServerError({\n Error_Code: code,\n Error_Details: details,\n })\n trackErrorComponentData(sources.Server, code, details)\n}\n\n//* Video mode\n// on taken video fail\nexport const trackVideoTakeFail = () => {\n const code = 'Vm - Video'\n const details = 'Failed taking a video'\n trackServerError({\n Error_Code: code,\n Error_Details: details,\n })\n trackErrorComponentData(sources.Server, code, details)\n}\n\n//* Generic error\nexport const trackGenericError = (code: string, message: string) => {\n trackClientError({\n Error_Code: code,\n Error_Details: message,\n })\n trackErrorComponentData(sources.Client, code, message)\n}\n","import { trackClickComponentData } from './componentTracking'\nimport { trackAttribute, valueTypes } from './helpers'\nimport { executeOnce } from './utils'\n\n// Close button\nexport const trackClickButtonClose = () => {\n const label = 'X_X_VirtualMirror_Close'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Menu Try on\nexport const trackClickMenuTryOn = () => {\n const label = 'X_X_VirtualMirror_Menu_TryOn'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Menu Video mode\nexport const trackClickMenuVideo = () => {\n const label = 'X_X_VirtualMirror_Menu_Video'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Menu Picture mode\nexport const trackClickMenuPicture = () => {\n const label = 'X_X_VirtualMirror_Menu_Picture'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Take a picture in picture mode\nexport const trackClickTakePicture = () => {\n const label = 'X_X_VirtualMirror_TakePic'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Upload a picture in picture mode\nexport const trackClickUploadPicture = () => {\n const label = 'X_X_VirtualMirror_UploadPic'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Save img\nexport const trackClickSaveImg = () => {\n const label = 'X_X_VirtualMirror_Share_Img'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Share social\nexport const trackClickShareSocial = () => {\n const label = 'X_X_VirtualMirror_Share_Social'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Transition view\nexport const trackClickTransitionView = () => {\n const label = 'X_X_VirtualMirror_Transitions'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Transition view - Lens\nexport const trackClickTransitionLens = () => {\n const label = 'X_X_VirtualMirror_Transitions_Lens'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Transition view - Color\nexport const trackClickTransitionColor = () => {\n const label = 'X_X_VirtualMirror_Transitions_Color'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Transition view - Frame\nexport const trackClickTransitionFrame = () => {\n const label = 'X_X_VirtualMirror_Transitions_Frame'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Add to wishlist click\nexport const trackClickAddToWishlist = () => {\n const label = 'X_X_VirtualMirror_AddFav'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Add to cart click\nexport const trackClickAddToCart = () => {\n const label = 'X_X_VirtualMirror_AddCart'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n trackClickComponentData(label)\n}\n\n// Brightness bar\nexport const trackClickBrightnessBar = () => {\n const label = 'X_X_VirtualMirror_Transitions_Brightness'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n executeOnce(trackClickComponentData, label)(label)\n}\n\n// Lens carousel\nexport const trackClickLensCarousel = () => {\n const label = 'X_X_VirtualMirror_Transitions_Lens_Carousel'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n executeOnce(trackClickComponentData, label)(label)\n}\n\n// Lens color carousel\nexport const trackClickColorCarousel = () => {\n const label = 'X_X_VirtualMirror_Transitions_Color_Carousel'\n trackAttribute({\n data_element_id: label,\n data_analytics_available_call: valueTypes.Positive,\n })\n executeOnce(trackClickComponentData, label)(label)\n}\n","import { Product, ProductPrice } from '@customTypes/product'\nimport { trackComponentEvent, trackEventComponentData } from './componentTracking'\nimport {\n lensTypes,\n trackEvent,\n valueTypes,\n TakeMode,\n getFrameType,\n getCategory,\n formatAnalyticsProducts,\n} from './helpers'\n\nexport const retrieveDecimalValue = (str?: string) => {\n if (!str) return ''\n const regex = /[+-]?([0-9]*[.])?[0-9]+/\n return str.match(regex)?.[0] || ''\n}\n\nconst trackEventAddToCart = (product: Product, price: string, priceFull: string) => {\n const id = product.isCustom ? product.code : product.upc\n trackEvent({\n Events_CartAdd: valueTypes.Positive,\n Products: {\n [id]: {\n Category: getCategory(product),\n FrameType: getFrameType(product),\n LensType: lensTypes.Plano,\n Price: price,\n PriceFull: priceFull,\n },\n },\n })\n}\n\nconst trackEventAddToWishlist = (product: Product, takeMode: TakeMode) => {\n const formattedProduct = formatAnalyticsProducts([product])\n trackEvent({\n Events_ProdFavAdd: valueTypes.Positive,\n Take_Mode: takeMode,\n Products: {\n ...formattedProduct,\n },\n })\n}\n\nconst trackEventTakePhoto = (product: Product, takeMode: TakeMode) => {\n const formattedProduct = formatAnalyticsProducts([product])\n trackEvent({\n Events_VMScreenshot: valueTypes.Positive,\n Take_Mode: takeMode,\n Products: {\n ...formattedProduct,\n },\n })\n}\n\nconst trackEventSharePhoto = (product: Product, takeMode: TakeMode) => {\n const formattedProduct = formatAnalyticsProducts([product])\n trackEvent({\n Events_SocialShare: valueTypes.Positive,\n Take_Mode: takeMode,\n Products: {\n ...formattedProduct,\n },\n })\n}\n\nconst trackEventFitGlasses = (product: Product, takeMode: TakeMode) => {\n const formattedProduct = formatAnalyticsProducts([product])\n trackEvent({\n Events_VMFit: valueTypes.Positive,\n Take_Mode: takeMode,\n Products: {\n ...formattedProduct,\n },\n })\n}\n\nexport const trackAddToCart = (product: Product, takeMode: TakeMode, price?: ProductPrice) => {\n const formattedPrice = retrieveDecimalValue(price?.current.text)\n const formattedPriceFull = retrieveDecimalValue(price?.previous?.text)\n trackEventAddToCart(product, formattedPrice, formattedPriceFull)\n trackEventComponentData([product], takeMode, 'CartAdd')\n}\n\nexport const trackAddToWishlist = (product: Product, takeMode: TakeMode) => {\n trackEventAddToWishlist(product, takeMode)\n trackEventComponentData([product], takeMode, 'FavAdd')\n}\n\nexport const trackTakePhoto = (product: Product, takeMode: TakeMode) => {\n trackEventTakePhoto(product, takeMode)\n trackEventComponentData([product], takeMode, 'TakeShare')\n}\n\nexport const trackSharePhoto = (product: Product, takeMode: TakeMode) => {\n trackEventSharePhoto(product, takeMode)\n trackEventComponentData([product], takeMode, 'SocialShare')\n}\n\nexport const trackFitGlasses = (product: Product, takeMode: TakeMode) => {\n trackEventFitGlasses(product, takeMode)\n trackEventComponentData([product], takeMode, 'FitGlasses')\n}\n\nexport const trackGR = () => {\n trackComponentEvent('GlassRemoval')\n}\n","import { Product } from '@customTypes/product'\nimport { trackEventComponentData } from './componentTracking'\nimport {\n sections,\n trackOnload,\n valueTypes,\n DefaultProduct,\n TakeMode,\n formatAnalyticsProducts,\n} from './helpers'\n\nconst trackImpressionInitVM = (products: DefaultProduct) => {\n trackOnload({\n Page_Section1: sections.VirtualMirror,\n Page_Section2: 'Render',\n Events_VMRender: valueTypes.Positive,\n Products: products,\n })\n}\n\nexport const trackInitVM = (products: Product[], takeMode: TakeMode) => {\n const formattedProducts = formatAnalyticsProducts(products)\n trackImpressionInitVM(formattedProducts)\n trackEventComponentData(products, takeMode, 'Render')\n}\n","import { ProductPrice, Product } from '@customTypes/product'\nimport {\n liveTryOn,\n pictureModeView,\n pictureMode,\n videoMode,\n videoModeView,\n uploadInstructions,\n} from '@utils/routes'\nimport { useMemo } from 'react'\nimport { useLocation } from 'react-router'\nimport { trackClickAddToCart, trackClickAddToWishlist, trackClickShareSocial } from './clicks'\nimport {\n trackTakePhoto,\n trackSharePhoto,\n trackAddToWishlist,\n trackFitGlasses,\n trackAddToCart,\n} from './events'\nimport { takeMode } from './helpers'\nimport { trackInitVM } from './impressions'\n\nconst pathToTakeMode = {\n [liveTryOn()]: takeMode.vto,\n [pictureMode(pictureModeView())]: takeMode.picture,\n [videoMode(videoModeView())]: takeMode.video,\n [pictureMode(uploadInstructions())]: takeMode.pictureUpload,\n}\n\ntype State = {\n from?: string\n}\n\nconst useTakeMode = () => {\n const location = useLocation()\n const from = (location?.state as State)?.from\n const path = from ? from : location.pathname\n const mode = pathToTakeMode[path]\n\n return useMemo(() => ({ takeMode: mode }), [mode])\n}\n\nexport const useFromPage = () => {\n const location = useLocation()\n const from = (location?.state as State)?.from\n\n return from\n}\n\nexport const useAddToCart = (product: Product, price?: ProductPrice) => {\n const { takeMode } = useTakeMode()\n return useMemo(\n () => () => {\n trackClickAddToCart()\n trackAddToCart(product, takeMode, price)\n },\n [product, price, takeMode]\n )\n}\n\nexport const useAddToWishlist = (product: Product) => {\n const { takeMode } = useTakeMode()\n return useMemo(\n () => () => {\n trackClickAddToWishlist()\n trackAddToWishlist(product, takeMode)\n },\n [product, takeMode]\n )\n}\n\nexport const useTakePhoto = (product: Product) => {\n const { takeMode } = useTakeMode()\n return useMemo(\n () => () => {\n trackTakePhoto(product, takeMode)\n },\n [product, takeMode]\n )\n}\n\nexport const useSharePhoto = (product: Product) => {\n const { takeMode } = useTakeMode()\n return useMemo(\n () => () => {\n trackClickShareSocial()\n trackSharePhoto(product, takeMode)\n },\n [product, takeMode]\n )\n}\n\nexport const useFitGlasses = (product: Product | null) => {\n const { takeMode } = useTakeMode()\n return useMemo(\n () => () => {\n if (product) trackFitGlasses(product, takeMode)\n },\n [product, takeMode]\n )\n}\n\nexport const useTrackInitVM = (products: Product[]) => {\n const { takeMode } = useTakeMode()\n return useMemo(\n () => () => {\n trackInitVM(products, takeMode)\n },\n [products, takeMode]\n )\n}\n","import config from '@config/index'\nimport colorsData from '../colors.json'\n\nimport { Color } from '@customTypes/product'\n\nexport const getColorSwatches = () => {\n return () =>\n new Promise(resolve => {\n fetch(config.vmColorApiUrl + '/assets/transitions/transitions-swatches.json')\n .then(res => res.json())\n .then(resolve)\n .catch(() => resolve(colorsData)) // we should return the local colors.json if the fetch would failed for fallback capability\n })\n}\n","const PXTOEM_RATIO = 16\n\nexport const pxToEm = (pxValue: number) => {\n //This ratio is the one used as a base font for the body to calculate all the em sizes to use\n return `${(pxValue / PXTOEM_RATIO).toFixed(5)}em`\n}\n","export const getTransitionLensLabel = (lens?: string) =>\n lens === 'SIGNATURE'\n ? 'Transitions® Signature® Gen8™'\n : lens === 'XTRACTIVE'\n ? 'Transitions® Xtractive®'\n : lens === 'VANTAGE'\n ? 'Transitions® XTRActive® Polarized™'\n : ''\n","export const truncateString = (str: string, num: number) => {\n return str.length > num ? str.substring(0, num) + '...' : str\n}\n","export const notUndefined = (x: T | undefined): x is T => x !== undefined\n\nconst isDesktopBrowser =\n !/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\n navigator.userAgent\n )\n\nconst isIOS = () =>\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 0) ||\n navigator.platform === 'iPad'\n\nexport const isDesktopView = () => {\n return window.innerWidth >= 1024 && isDesktopBrowser && !isIOS()\n}\n\nexport const isMobileView = () => {\n return window.innerWidth < 768\n}\n\nexport const isSmallMobileView = () => {\n return window.innerWidth < 376\n}\n\nexport const isIpadView = () => {\n return (\n window.innerWidth >= 768 &&\n window.innerWidth <= 1024 &&\n window.innerHeight > window.innerWidth &&\n !isDesktopBrowser\n )\n}\n\n// eslint-disable-next-line\nexport const isValidHttpUrl = (url?: any) => {\n let validateUrl\n try {\n validateUrl = new URL(url)\n } catch (_) {\n return false\n }\n return validateUrl?.protocol === 'http:' || validateUrl?.protocol === 'https:'\n}\n","import { Layout } from '@components/Layout'\nimport { VM_READY } from '@components/Loader/loader'\nimport { Outlet } from 'react-router'\n\nconst PictureMode: React.FC = () => {\n return (\n // injects .vm-ready classname to remove the AppLoader component if default visualization mode is picture-mode\n \n \n \n )\n}\n\nexport default PictureMode\n","import styled from 'styled-components'\nimport { pxToEm } from '@libs/styled'\n\nexport const PrivacyPolicyContainer = styled.div`\n #bipa-overlay-root-style.bipa-overlay {\n font-size: ${pxToEm(16)};\n\n p {\n font: ${({ theme }) => theme.fonts.paragraph};\n }\n\n b,\n #BIPA_CITIZEN_QUESTION,\n #PRIVACY_IMPLICIT_TERMS_AND_CONDITIONS {\n font: ${({ theme }) => theme.fonts.paragraphBold};\n }\n\n #bipa-field-warning {\n font-size: ${pxToEm(14)};\n margin-bottom: ${pxToEm(16)};\n }\n }\n\n #bipa-overlay-root-style.bipa-overlay #bipa-component-container {\n max-width: 100%;\n padding: 1em;\n\n ${({ theme }) => theme.media.medium} {\n padding: 2em;\n }\n }\n\n #bipa-overlay-root-style.bipa-overlay #bipa-component-container .scrollable-container {\n padding-bottom: 10%;\n\n ${({ theme }) => theme.media.medium} {\n padding-bottom: 5%;\n }\n }\n\n #bipa-overlay-root-style #privacy-agreement .footer-bar {\n position: absolute;\n z-index: 999;\n }\n\n font: ${({ theme }) => theme.fonts.paragraph};\n\n #bipa-overlay-root-style.bipa-overlay h1,\n #bipa-overlay-root-style #bipa-biometric-agreement #BIOMETRIC_AGREEMENT_TITLE {\n margin: ${pxToEm(6)} 0 ${pxToEm(24)};\n width: 100%;\n text-align: center;\n font: ${({ theme }) => theme.fonts.titleSmall};\n ${({ theme }) => theme.media.medium} {\n margin: ${pxToEm(52)} 0 ${pxToEm(56)};\n }\n }\n\n #bipa-overlay-root-style #privacy-agreement .footer-bar .footer-content {\n padding: 1em;\n\n .line.buttons {\n margin-top: 1em;\n\n span {\n font: ${({ theme }) => theme.fonts.span};\n }\n }\n }\n\n #bipa-overlay-root-style #bipa-biometric-agreement .field input {\n border: solid 1px ${({ theme }) => theme.palette.lightgray};\n border-radius: ${pxToEm(2)};\n height: ${pxToEm(46)};\n padding: 0 ${pxToEm(16)};\n &.error {\n border: solid 1px ${({ theme }) => theme.palette.error};\n }\n }\n\n #bipa-overlay-root-style #bipa-biometric-agreement p#bipa-field-warning.note-warning {\n color: ${({ theme }) => theme.palette.error};\n }\n\n #bipa-overlay-root-style .yes-no-checkbox .switch:focus-within {\n outline: none;\n }\n #bipa-overlay-root-style .yes-no-checkbox .switch:focus {\n outline: none;\n }\n`\n\nexport const PrivacyHeader = styled.div`\n position: relative;\n padding: ${pxToEm(24)} 3em;\n display: flex;\n align-items: center;\n justify-content: center;\n\n h1 {\n text-align: center;\n font: ${({ theme }) => theme.fonts.titleSmall};\n visibility: hidden;\n margin: 0;\n }\n\n &.show {\n h1 {\n visibility: visible;\n }\n }\n\n + #vm-privacy-policy {\n flex: 1;\n overflow: hidden;\n\n #bipa-overlay-root-style.bipa-overlay #bipa-component-container {\n padding-top: 0;\n\n .scrollable-container {\n // padding-right: ${pxToEm(15)};\n\n h1#PRIVACY_AGREEMENT_TITLE {\n display: none;\n }\n }\n }\n }\n\n ${({ theme }) => theme.media.medium} {\n padding: ${pxToEm(70)} 2em ${pxToEm(56)};\n }\n\n ${({ theme }) => theme.media.large} {\n padding: ${pxToEm(40)} 2em ${pxToEm(56)};\n }\n`\n\nexport const CloseIconWrapper = styled.div`\n position: absolute;\n cursor: pointer;\n top: ${pxToEm(12)};\n right: ${pxToEm(15)};\n\n & svg {\n width: ${pxToEm(30)};\n height: ${pxToEm(30)};\n }\n\n ${({ theme }) => theme.media.medium} {\n top: ${pxToEm(34)};\n right: ${pxToEm(35)};\n\n & svg {\n width: ${pxToEm(40)};\n height: ${pxToEm(40)};\n }\n }\n\n ${({ theme }) => theme.media.large} {\n top: ${pxToEm(17)};\n }\n`\n\nexport const LoaderContainer = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n`\n\n// export const LoaderContainer = styled.div`\n// position: absolute;\n// top: 0;\n// left: 0;\n// right: 0;\n// bottom: 0;\n// display: flex;\n// align-items: center;\n// justify-content: center;\n// `\n","import { IconProps } from '@customTypes/icons'\nimport React from 'react'\nexport const CloseLineIcon: React.FC = ({ width = '32px', height = '32px' }) => {\n return (\n \n \n \n )\n}\n","import { Layout } from '@components/Layout'\nimport { VMInitialize } from '@components/VMInitialize'\nimport { useVirtualMirrorApp } from '@hooks/useVirtualMirrorApp'\nimport { useConfig } from '@providers/configProvider'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { BipaPage, VirtualMirror } from '@luxottica/virtual-mirror'\nimport { useDimensions } from '@hooks/useDimensions'\nimport { CloseIconWrapper, PrivacyHeader, PrivacyPolicyContainer } from './styles'\nimport { useNavigate } from 'react-router'\nimport { availableMode } from '@utils/routes'\nimport { useSelector } from 'react-redux'\nimport { AppState } from '@store/index'\nimport { CloseLineIcon } from '@components/core/Icons/CloseLineIcon'\nimport { useTranslation } from 'react-i18next'\nimport { ErrorModal } from '@components/ErrorModal'\nimport { VM_READY } from '@components/Loader/loader'\nimport { useTranslationInit } from 'src/i18n'\n\nconst PRIVACY_POLICY_CONTAINER = 'vm-privacy-policy'\n\nconst closeVirtualMirror = async () => {\n try {\n await VirtualMirror.closeMirror({ target: PRIVACY_POLICY_CONTAINER })\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Error closing virtual mirror: ${error}`)\n }\n}\n\nconst PrivacyPolicyPage = () => {\n const config = useConfig()\n const {\n setIsReady,\n setIsVMInitialized,\n currentProduct,\n isVMInitialized,\n isProductLoaded,\n vmProducts,\n } = useVirtualMirrorApp()\n\n const navigate = useNavigate()\n const container = useRef(null)\n const isPrivacyAccepted = useSelector((s: AppState) => s.privacyPolicy.isPrivacyAccepted)\n const { width, height } = useDimensions(container.current)\n const [isDisplay, setIsDisplay] = useState(false)\n const [isBipaConsent, setIsBipaConsent] = useState(false)\n\n const renderParams = useMemo(() => {\n if (currentProduct) {\n return {\n target: PRIVACY_POLICY_CONTAINER,\n upc: currentProduct.upc,\n options: {\n ...(width && { width: width }),\n ...(height && { height: height }),\n ...(config.vmInit.glassesEnv && {\n // Use any due to impossible to import GlassesEnvironment type, required for env variable\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n environment: { glasses: config.vmInit.glassesEnv as any },\n }),\n },\n }\n }\n\n return null\n }, [currentProduct, width, height, config.vmInit.glassesEnv])\n\n const { t } = useTranslation()\n const { initTranslation, isTranslationLoaded } = useTranslationInit()\n\n const onCloseBtnClick = useCallback(() => {\n config.onClose && config.onClose()\n }, [config])\n\n const onDisplayPage = useCallback((page: BipaPage) => {\n setIsDisplay(true)\n\n if (page === 'BIOMETRIC_FORM') setIsBipaConsent(true)\n else setIsBipaConsent(false)\n }, [])\n\n useEffect(() => {\n const render = async () => {\n if (isVMInitialized && renderParams) {\n try {\n await VirtualMirror.renderMirror(renderParams)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`Error while rendering vm: ${e}`)\n }\n }\n }\n render()\n }, [isVMInitialized, renderParams])\n\n useEffect(() => {\n if (isPrivacyAccepted) {\n closeVirtualMirror()\n navigate(availableMode())\n }\n }, [isPrivacyAccepted, navigate])\n\n const noUpc = isProductLoaded && vmProducts.length === 0\n\n useEffect(() => {\n if (isDisplay || noUpc) {\n initTranslation()\n }\n }, [isDisplay, initTranslation, noUpc])\n\n return (\n \n {/* {!isDisplay && (\n \n \n \n )} */}\n \n \n

{isTranslationLoaded ? t('PRIVACY_AGREEMENT_TITLE') : <> }

\n {(isDisplay || isBipaConsent) && (\n \n \n \n )}\n
\n \n \n \n \n )\n}\n\nexport default PrivacyPolicyPage\n","import { Layout } from '@components/Layout'\nimport { VM_READY } from '@components/Loader/loader'\nimport { AppState } from '@store/index'\nimport { setPrivacyAcceptedCookie, isPrivacyCookieAcceptedFromFa } from '@utils/cookies'\nimport { useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { Outlet } from 'react-router'\n\nconst VideoMode: React.FC = () => {\n const isPrivacyAccepted = useSelector((s: AppState) => s.privacyPolicy.isPrivacyAccepted)\n useEffect(() => {\n if (isPrivacyAccepted && !isPrivacyCookieAcceptedFromFa()) {\n setPrivacyAcceptedCookie()\n }\n }, [isPrivacyAccepted])\n\n return (\n // injects .vm-ready classname to remove the AppLoader component if default visualization mode is video-mode\n \n \n \n )\n}\n\nexport default VideoMode\n","import { pxToEm } from '@libs/styled'\nimport styled from 'styled-components'\n\nexport const StyledContainer = styled.div`\n &.virtual-mirror-root-style .vm-swipeable-container #notification {\n background-color: rgba(0, 0, 0, 0.65);\n backdrop-filter: blur(4px);\n\n top: 50%;\n left: unset;\n right: unset;\n bottom: unset;\n\n width: auto;\n padding: ${pxToEm(5)} ${pxToEm(16)};\n\n span#notificationText {\n display: flex;\n align-items: center;\n min-height: 36px;\n font-family: var(--vm-default-font-medium);\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n }\n\n &.overlay-hide {\n display: none;\n }\n\n &.show {\n display: flex !important;\n }\n }\n\n .loading-text,\n .loading-fraction {\n font: ${({ theme }) => theme.fonts.headingMediumBold};\n }\n\n &.virtual-mirror-root-style .loading-text .loading-text-header,\n &.virtual-mirror-root-style .loading-text .loading-text-subtext {\n font: ${({ theme }) => theme.fonts.paragraphBold};\n\n ${({ theme }) => theme.media.small} {\n font: ${({ theme }) => theme.fonts.spanBold};\n padding: 0 10px;\n }\n }\n\n &.virtual-mirror-root-style .mirror-canvas-output {\n background-color: rgba(0, 0, 0, 0.3);\n }\n`\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport React, { useEffect, useMemo, useRef, useCallback } from 'react'\nimport { VirtualMirror } from '@luxottica/virtual-mirror'\n\nimport { VMInitialize } from '@components/VMInitialize'\nimport { VM_READY } from '@components/Loader/loader'\nimport { Layout } from '@components/Layout'\nimport { StyledContainer } from '@components/VMInitialize/styles'\n\nimport { Color, Product } from '@customTypes/product'\nimport { Screenshot } from '@customTypes/screenshot'\n\nimport { default as appConfig } from '@config/index'\nimport { useVirtualMirrorApp } from '@hooks/useVirtualMirrorApp'\nimport { useConfig } from './configProvider'\nimport { useDimensions } from '@hooks/useDimensions'\nimport { useFitGlasses, useTrackInitVM } from '@libs/analytics'\nimport { useDispatch } from 'react-redux'\nimport { setVtoPage } from '@store/actions/ui'\nimport { useMoveGlassObserver } from '@hooks/useMoveGlassObserver'\nimport { useTranslationInit } from 'src/i18n'\n\nexport const CONTAINER_ID_LIVE_TRY_ON = 'vm-app-widget'\n\ntype VMDispatch = React.Dispatch>\n\ntype VMHookType = {\n isReady: boolean\n isPreparingScreenshot: boolean\n isVMInitialized: boolean\n isTransitionActive: boolean\n isProductLoaded: boolean\n currentProduct: Product | null\n colors: Color[]\n currentColor: string\n colorsCatalog: Color[]\n currentLens: string | undefined\n lensCatalog: string[]\n lensActivation: number\n userId: string\n vmProducts: Product[]\n image: Screenshot | undefined\n isConfigurator: boolean\n changeLens: (lens: string) => void\n changeUpc: (upc: string) => void\n toggleTransitionActive: () => void\n setIsReady: VMDispatch\n setIsVMInitialized: VMDispatch\n setIsPreparingScreenshot?: VMDispatch\n setCurrentProduct: VMDispatch\n setColors: VMDispatch\n setCurrentColor: VMDispatch\n setColorsCatalog: VMDispatch\n setLensCatalog: VMDispatch\n setLensActivation: VMDispatch\n setUserID: VMDispatch\n setImage: VMDispatch\n setIsConfigurator: VMDispatch\n}\n\ntype VMContextType = VMHookType & { getScreenshot?: () => void; onRefresh?: () => void }\n\nexport const VMContext = React.createContext({} as VMContextType)\n\nexport const useVM = () => React.useContext(VMContext)\n\ninterface VMProviderProps {\n element?: React.ReactNode\n children?: (props: {\n isReady: boolean\n isVMInitialized: boolean\n isTransitionActive: boolean\n isNoUpc: boolean\n isEvolveProduct: boolean\n currentProduct: Product | null\n setColors: React.Dispatch>\n }) => React.ReactNode\n}\n\nexport const VMProvider: React.FC = ({ children, element }) => {\n const config = useConfig()\n const vmHook = useVirtualMirrorApp()\n const dispatch = useDispatch()\n\n const {\n isVMInitialized,\n isReady,\n currentProduct,\n currentColor,\n isTransitionActive,\n vmProducts,\n lensActivation,\n isProductLoaded,\n isConfigurator,\n setIsReady,\n setIsVMInitialized,\n setColors,\n setImage,\n setIsPreparingScreenshot,\n } = vmHook\n\n const trackFitGlasses = useFitGlasses(currentProduct)\n const trackInitVM = useTrackInitVM(vmProducts)\n\n useMoveGlassObserver(isReady, 'vm')\n\n const { initTranslation, isTranslationLoaded } = useTranslationInit()\n\n const container = useRef(null)\n const { width, height } = useDimensions(container.current)\n\n const isEvolveProduct = currentProduct?.transitionLens?.isEvolve || false\n const isNoUpc = isProductLoaded && vmProducts.length === 0\n\n const renderParams = useMemo(() => {\n if (currentProduct)\n return {\n target: CONTAINER_ID_LIVE_TRY_ON,\n upc: currentProduct.upc,\n options: {\n ...(currentColor &&\n (isTransitionActive || isEvolveProduct || (isConfigurator && currentColor)) && {\n transitionColor: currentColor,\n }),\n ...(width && { width: width }),\n ...(height && { height: height }),\n environment: {\n // Use any due to impossible to import GlassesEnvironment type, required for env variable\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(config.vmInit.glassesEnv && { glasses: config.vmInit.glassesEnv as any }),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n video: (config.vmInit.environment || appConfig.vmEnv) as any,\n },\n },\n }\n\n return null\n }, [\n currentProduct,\n currentColor,\n isTransitionActive,\n isEvolveProduct,\n isConfigurator,\n width,\n height,\n config.vmInit.glassesEnv,\n config.vmInit.environment,\n ])\n\n useEffect(() => {\n if (isReady) {\n trackFitGlasses()\n }\n }, [isReady, trackFitGlasses])\n\n useEffect(() => {\n if (isVMInitialized) {\n trackInitVM()\n }\n }, [trackInitVM, isVMInitialized])\n\n useEffect(() => {\n if (!isVMInitialized) return\n if (isTransitionActive || isEvolveProduct || isConfigurator) {\n VirtualMirror.setTransitionOpacity({\n opacity: lensActivation,\n })\n }\n }, [isTransitionActive, lensActivation, isEvolveProduct, isVMInitialized, isConfigurator])\n\n useEffect(() => {\n const render = async () => {\n if (isVMInitialized && renderParams) {\n try {\n await VirtualMirror.renderMirror(renderParams)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`Error while rendering vm: ${e}`)\n }\n }\n }\n render()\n }, [isVMInitialized, renderParams])\n\n useEffect(() => {\n if (isVMInitialized) {\n dispatch(setVtoPage('live-try-on'))\n }\n }, [dispatch, isVMInitialized])\n\n useEffect(() => {\n if (isNoUpc) {\n dispatch(setVtoPage('off'))\n }\n }, [dispatch, isNoUpc])\n\n const getScreenshot = useCallback(async () => {\n try {\n setIsPreparingScreenshot(true)\n const screenshot = await VirtualMirror.getScreenshot()\n setImage(screenshot)\n setIsPreparingScreenshot(false)\n } catch (error) {\n setIsPreparingScreenshot(false)\n // eslint-disable-next-line no-console\n console.error(`Error generating the image: ${error}`)\n }\n }, [setIsPreparingScreenshot, setImage])\n\n useEffect(() => {\n if (isVMInitialized && !isTranslationLoaded) {\n initTranslation()\n }\n }, [isVMInitialized, isTranslationLoaded, initTranslation])\n\n return (\n \n \n \n \n {isTranslationLoaded && (\n <>\n {children\n ? children({\n isReady,\n isVMInitialized,\n isTransitionActive,\n isNoUpc,\n currentProduct,\n isEvolveProduct,\n setColors,\n })\n : element}\n \n )}\n \n \n \n )\n}\n","import { useCallback, useEffect } from 'react'\n\nimport { Color } from '@customTypes/product'\nimport { VtoCore, VtoCoreEnvironment } from '@luxottica/vto-core'\nimport { useConfig } from '@providers/configProvider'\nimport { useRefValue } from '@hooks/useRefValue'\nimport { useVtoInitParams } from '@hooks/useVtoInitParams'\nimport { getColorSwatches } from '@libs/getColorSwatches'\nimport { useVM } from '@providers/VmProvider'\n\ninterface VtoInitializeProps {\n children: React.ReactNode\n onRefresh: () => void\n}\n\nconst getGlassesEnvironment = (vtoEnv: VtoCoreEnvironment) =>\n vtoEnv.toLowerCase() === 'production' ? 'PROD' : 'TEST'\n\nexport const VtoInitialize: React.FC = ({ children, onRefresh }) => {\n const config = useConfig()\n const { setUserID, setIsVMInitialized, setColors } = useVM()\n const { options } = useVtoInitParams(config, setUserID, onRefresh)\n\n const initializeVto = useCallback(\n async (colorSwatches: () => Promise) => {\n try {\n VtoCore.initialize(options, () => {\n setIsVMInitialized(true)\n })\n\n const colorsData = await colorSwatches()\n\n VtoCore.downloadTransitionColorCatalogue(\n // Use any due to impossible to import GlassesEnvironment type, required for env variable\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getGlassesEnvironment(options.environment) as any\n ).then(transitionColors => {\n const colors: Color[] = transitionColors.map(colorCode => {\n const colorData = colorsData?.find((color: Color) => color.colorCode === colorCode)\n return {\n colorCode,\n colorName: colorData?.colorName,\n lensName: colorData?.lensName,\n swatchImage: colorData?.swatchImage,\n } as Color\n })\n setColors(colors)\n })\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Error initializing vto: ${error}`)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },\n [options, setIsVMInitialized, setColors]\n )\n const initVMRef = useRefValue(initializeVto)\n\n useEffect(() => {\n initVMRef.current(getColorSwatches())\n }, [initVMRef])\n\n return <>{children}\n}\n","import { InitializeOptions, VtoCoreEnvironment } from '@luxottica/vto-core'\nimport { Config } from '@customTypes/config'\nimport { trackVideoTakeFail } from '@libs/analytics'\nimport { default as appConfig } from '@config/index'\nimport { fallbackLanguage } from '@utils/language'\n\nexport const useVtoInitParams = (\n config: Config,\n setUserID: (value: string) => void,\n onRefresh: () => void\n) => {\n const { store, vmInit, locale = fallbackLanguage(config) } = config\n\n const initOptions: InitializeOptions = {\n // userId: '',\n environment: (vmInit.environment?.toLowerCase() ||\n appConfig.vmEnv?.toLowerCase()) as VtoCoreEnvironment,\n locale,\n brand: vmInit.brand,\n storeId: store.id,\n analyticsConfig: {\n onRenderFailure() {\n onRefresh()\n },\n },\n }\n\n return {\n options: initOptions,\n onSuccess: (userId: string) => setUserID(userId),\n onError: trackVideoTakeFail,\n }\n}\n","import styled from 'styled-components'\n\nimport { pxToEm } from '@libs/styled'\n\nexport const VideoModeContainer = styled.div`\n display: inline-flex;\n width: 100%;\n justify-content: center;\n\n &.vto-core-module-root-style .vto-swipeable-container {\n justify-content: center;\n\n .two-finger-overlay {\n &.overlay-hide {\n display: none;\n }\n\n &.visible {\n display: flex !important;\n }\n\n background: rgba(0, 0, 0, 0.65);\n backdrop-filter: blur(4px);\n position: absolute;\n top: 50%;\n left: unset;\n right: unset;\n bottom: unset;\n\n width: auto;\n height: auto;\n max-width: unset;\n min-width: 250px;\n padding: ${pxToEm(5)} ${pxToEm(16)};\n\n svg {\n width: ${pxToEm(24)};\n height: ${pxToEm(24)};\n }\n\n span {\n display: flex;\n align-items: center;\n min-height: 36px;\n font-family: var(--vm-default-font-medium);\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n }\n }\n }\n`\nexport const PhotoModeContainer = styled(VideoModeContainer)`\n .vto-swipeable-container .render-container-multipose {\n cursor: unset;\n }\n`\n\nexport const RotationIconContainer = styled.div`\n position: absolute;\n top: 50%;\n width: auto;\n z-index: 1;\n min-width: 250px;\n border-radius: ${pxToEm(30)};\n background-color: rgba(0, 0, 0, 0.65);\n backdrop-filter: blur(4px);\n\n display: flex;\n justify-content: center;\n align-items: center;\n padding: ${pxToEm(5)} ${pxToEm(16)};\n`\n\nexport const RotationTip = styled.p`\n font-family: var(--vm-default-font-medium);\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n\n color: ${({ theme }) => theme.palette.white[100]};\n`\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { CONTAINER_ID_PICTURE_MODE, CONTAINER_ID_VIDEO_MODE, VtoProviderProps } from './VtoProvider'\nimport { RotateIcon, RotateIconDesktop } from '@components/core/Icons'\nimport { isDesktopView } from '@libs/utils'\nimport { getPictureId, getVideoId } from '@utils/sessionStorage'\nimport {\n PhotoModeContainer,\n RotationIconContainer,\n RotationTip,\n VideoModeContainer,\n} from '@components/VtoInitialize/styles'\nimport { useMoveGlassObserver } from '@hooks/useMoveGlassObserver'\nimport { useVM } from './VmProvider'\n\nconst ROTATE_ICON_SHOW_TIMES = 2\nconst REPEAT_ROTATE_ICON_INTERVAL = 30000\nconst ROTATE_ICON_SHOW_DURATION = 3000\n\nconst PictureModeElem: React.FC<{ id: string }> = ({ id }) => {\n const { isReady } = useVM()\n useMoveGlassObserver(isReady, 'vto')\n return \n}\n\nexport function withPicture(MainVtoProvider: React.ComponentType) {\n const VtoProvider: React.FC = props => {\n const pictureId = getPictureId()\n\n return (\n <>\n {/* VTO container */}\n \n {/* VTO Provider */}\n \n \n )\n }\n\n return VtoProvider\n}\n\nconst VideoModeElem: React.FC<{ id: string }> = ({ id }) => {\n const { t } = useTranslation()\n const [isRotateIconVisible, setRotateIconVisible] = useState(false)\n const [iconShowTimes, setIconShowTimes] = useState(0)\n const containerRef = useRef(null)\n\n const { isReady } = useVM()\n const { isMoveGlassesShow } = useMoveGlassObserver(isReady, 'vto')\n\n useEffect(() => {\n if (isRotateIconVisible) {\n const timer = setTimeout(() => {\n setIconShowTimes(s => s + 1)\n setRotateIconVisible(false)\n }, ROTATE_ICON_SHOW_DURATION)\n return () => clearTimeout(timer)\n }\n }, [isRotateIconVisible])\n\n useEffect(() => {\n if (!isRotateIconVisible && iconShowTimes && iconShowTimes <= ROTATE_ICON_SHOW_TIMES) {\n const timer = setTimeout(() => {\n setRotateIconVisible(!isMoveGlassesShow())\n }, REPEAT_ROTATE_ICON_INTERVAL)\n return () => clearTimeout(timer)\n }\n }, [isRotateIconVisible, iconShowTimes, isMoveGlassesShow])\n\n const observerCallback = useCallback((_: MutationRecord[], observer: MutationObserver) => {\n const debugOverlay = document.querySelector('.render-debug-overlay')\n if (debugOverlay) {\n setRotateIconVisible(true)\n observer.disconnect()\n }\n }, [])\n\n useEffect(() => {\n const observer = new MutationObserver(observerCallback)\n if (containerRef.current) {\n observer.observe(containerRef.current, { childList: true, subtree: true })\n }\n return () => {\n observer.disconnect()\n }\n }, [observerCallback])\n\n return (\n <>\n \n {isRotateIconVisible && (\n \n {isDesktopView() ? : }\n \n {isDesktopView()\n ? t('CORE.RENDER_VTO.CLICK_AND_MOVE')\n : t('CORE.RENDER_VTO.SWIPE_TWO_FINGERS')}\n \n \n )}\n \n \n )\n}\n\nexport function withVideo(MainVtoProvider: React.ComponentType) {\n const VtoProvider: React.FC = props => {\n const pictureId = getVideoId()\n\n return (\n <>\n {/* VTO container */}\n \n {/* VTO Provider */}\n \n \n )\n }\n\n return VtoProvider\n}\n","import React, { useEffect, useCallback } from 'react'\nimport { VtoCore } from '@luxottica/vto-core'\n\nimport { Product } from '@customTypes/product'\nimport { VMContext } from './VmProvider'\n\nimport { VtoInitialize } from '@components/VtoInitialize'\nimport { setVtoPage } from '@store/actions/ui'\nimport { VtoPage } from '@customTypes/vtoPage'\n\nimport { useNavigate } from 'react-router'\nimport { useVirtualMirrorApp } from '@hooks/useVirtualMirrorApp'\nimport { useDimensions } from '@hooks/useDimensions'\nimport { useFitGlasses } from '@libs/analytics'\nimport { useDispatch } from 'react-redux'\nimport { isDesktopView } from '@libs/utils'\nimport { withPicture, withVideo } from './Vto'\nimport { clearPictureId, clearVideoId } from '@utils/sessionStorage'\nimport { useTranslationInit } from 'src/i18n'\n\nconst nosePositionTouches = isDesktopView() ? 1 : 2\n\nexport const CONTAINER_ID_PICTURE_MODE = 'vm-picture-mode'\nexport const CONTAINER_ID_VIDEO_MODE = 'vm-video-mode-view'\n\nexport interface VtoProviderProps {\n vtoContainer?: string\n videoId?: string\n vtoPage?: VtoPage\n element?: React.ReactNode\n children?: (props: {\n isReady: boolean\n isTransitionActive: boolean\n isNoUpc: boolean\n currentProduct: Product | null\n onRefresh: () => void\n }) => React.ReactNode\n}\n\nexport const VtoProvider: React.FC = ({\n vtoContainer,\n videoId,\n vtoPage,\n element,\n children,\n}) => {\n const vmHook = useVirtualMirrorApp()\n const dispatch = useDispatch()\n const navigate = useNavigate()\n\n const {\n isVMInitialized,\n isReady,\n currentProduct,\n currentColor,\n isTransitionActive,\n vmProducts,\n lensActivation,\n isProductLoaded,\n isConfigurator,\n setIsReady,\n setImage,\n setIsPreparingScreenshot,\n } = vmHook\n\n const trackFitGlasses = useFitGlasses(currentProduct)\n\n const dimensions = useDimensions()\n const { initTranslation, isTranslationLoaded } = useTranslationInit()\n\n const isEvolveProduct = currentProduct?.transitionLens?.isEvolve || false\n const isNoUpc = isProductLoaded && vmProducts.length === 0\n\n const renderVto = useCallback(() => {\n if (currentProduct && vtoContainer && videoId)\n VtoCore.render(\n {\n divId: vtoContainer,\n videoId: videoId,\n upc: currentProduct.upc,\n showRotateBar: false,\n width: dimensions.width,\n height: dimensions.height,\n nosePositionTouches,\n },\n () => {\n setIsReady(true)\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => {}\n )\n }, [currentProduct, dimensions.height, dimensions.width, setIsReady, videoId, vtoContainer])\n\n useEffect(() => {\n if (isReady) {\n trackFitGlasses()\n }\n }, [isReady, trackFitGlasses])\n\n useEffect(() => {\n if (!currentProduct || (!currentProduct.upc && !isVMInitialized)) {\n return\n }\n renderVto()\n }, [currentProduct, isVMInitialized, renderVto])\n\n useEffect(() => {\n if (isTransitionActive || isEvolveProduct || isConfigurator) {\n VtoCore.setTransitionOpacity(lensActivation)\n renderVto()\n }\n }, [isTransitionActive, lensActivation, renderVto, isEvolveProduct, isConfigurator])\n\n useEffect(() => {\n if (!isTransitionActive && !isEvolveProduct && !isConfigurator) {\n VtoCore.setTransitionColorName('')\n VtoCore.setTransitionOpacity(0)\n renderVto()\n }\n }, [isTransitionActive, renderVto, isEvolveProduct, isConfigurator])\n\n useEffect(() => {\n if (isTransitionActive || isEvolveProduct || isConfigurator) {\n VtoCore.setTransitionColorName(currentColor)\n renderVto()\n }\n }, [isTransitionActive, isEvolveProduct, isConfigurator, currentColor, renderVto])\n\n useEffect(() => {\n if (isVMInitialized && vtoPage) {\n dispatch(setVtoPage(vtoPage))\n }\n }, [dispatch, isVMInitialized, vtoPage])\n\n useEffect(() => {\n if (isNoUpc) {\n dispatch(setVtoPage('off'))\n }\n }, [dispatch, isNoUpc])\n\n useEffect(() => {\n if (isVMInitialized && !isTranslationLoaded) {\n initTranslation()\n }\n }, [isVMInitialized, isTranslationLoaded, initTranslation])\n\n const getScreenshot = useCallback(async () => {\n try {\n setIsPreparingScreenshot(true)\n const img = await VtoCore.getScreenshot()\n setImage({\n imgURI: img.dataUrl,\n width: img.w,\n height: img.h,\n })\n setIsPreparingScreenshot(false)\n } catch (error) {\n setIsPreparingScreenshot(false)\n // eslint-disable-next-line no-console\n console.error(`Error generating the image: ${error}`)\n }\n }, [setIsPreparingScreenshot, setImage])\n\n const onRefresh = useCallback(() => {\n if (vtoPage === 'picture-mode') clearPictureId()\n else if (vtoPage === 'video-mode') clearVideoId()\n\n if (vtoContainer) {\n VtoCore.closeRender({ divId: vtoContainer }, () => {\n dispatch(setVtoPage('off'))\n navigate(-1)\n })\n }\n }, [dispatch, navigate, vtoContainer, vtoPage])\n\n return (\n \n \n {isTranslationLoaded && (\n <>\n {children\n ? children({ isReady, isTransitionActive, isNoUpc, currentProduct, onRefresh })\n : element}\n \n )}\n \n \n )\n}\n\nexport const PictureModeProvider = withPicture(VtoProvider)\n\nexport const VideoModeProvider = withVideo(VtoProvider)\n\nexport const closeVideoMode = () => {\n return new Promise((resolve, reject) => {\n VtoCore.closeRender({ divId: CONTAINER_ID_VIDEO_MODE }, resolve, reject)\n })\n}\n\nexport const closePictureMode = () => {\n return new Promise((resolve, reject) => {\n VtoCore.closeRender({ divId: CONTAINER_ID_PICTURE_MODE }, resolve, reject)\n })\n}\n","import { createContext, useContext } from 'react'\n\nimport { Config } from '../types/config'\n\nexport const ConfigContext = createContext({} as Config)\n\nexport const useConfig = () => useContext(ConfigContext)\n","export class ApiError extends Error {\n code: string | undefined\n description: string | undefined\n constructor(message: string, code?: string, description?: string) {\n super(message)\n this.code = code\n this.description = description\n }\n}\n\nexport default class ApiService {\n private apiUrl: string | undefined\n private headers: HeadersInit = {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n }\n private error: typeof ApiError\n\n constructor(apiUrl: string, headers?: HeadersInit, error = ApiError) {\n this.apiUrl = apiUrl\n this.headers = { ...this.headers, ...headers }\n this.error = error\n }\n\n private _retrieveData = async (\n url: string,\n method = 'get',\n data?: I,\n headers?: HeadersInit\n ): Promise => {\n const body = JSON.stringify(data)\n const res = await fetch(url, {\n method,\n headers: { ...this.headers, ...headers },\n body,\n })\n if (!res.ok) {\n const body = await res.text()\n throw new this.error(\n `ApiError: Error on retrieving data ${res.statusText}`,\n res.status.toString(),\n body\n )\n }\n try {\n return await res.json()\n } catch {\n const body = await res.text()\n throw new this.error('ApiError: Failed during JSON parsing', res.status.toString(), body)\n }\n }\n\n public post = (path: string, data: I, headers = {}) => {\n const url = `${this.apiUrl}${path}`\n return this._retrieveData(url, 'post', data, headers)\n }\n\n public get = (path: string, headers?: HeadersInit) => {\n const url = `${this.apiUrl}${path}`\n return this._retrieveData(url, 'get', undefined, headers)\n }\n}\n","import { Queue } from '@customTypes/animationApp'\n\nexport const SET_CURRENT_ANIMATION = 'vmmv-ui/animation/SET_CURRENT_ANIMATION'\nexport const SET_COMPLETE_ANIMATION = 'vmmv-ui/animation/SET_COMPLETE_ANIMATION'\nexport const RESTART_MENU_ANIMATION = 'vmmv-ui/animation/RESET_MENU_ANIMATION'\n\nexport interface SetCompleteAnimation {\n type: typeof SET_COMPLETE_ANIMATION\n}\n\nexport interface SetCurrentAnimation {\n type: typeof SET_CURRENT_ANIMATION\n payload: { currentAnimation: Queue | null }\n}\n\nexport interface RestartMenuAnimation {\n type: typeof RESTART_MENU_ANIMATION\n}\n\nexport const setCurrentAnimation = (currentAnimation: Queue | null): SetCurrentAnimation => {\n return {\n type: SET_CURRENT_ANIMATION,\n payload: {\n currentAnimation,\n },\n }\n}\n\nexport const setCompleteAnimation = (): SetCompleteAnimation => {\n return {\n type: SET_COMPLETE_ANIMATION,\n }\n}\n\nexport const restartMenuAnimation = (): RestartMenuAnimation => {\n return {\n type: RESTART_MENU_ANIMATION,\n }\n}\n\nexport type AnimationAppActionTypes =\n | SetCurrentAnimation\n | SetCompleteAnimation\n | RestartMenuAnimation\n","import { LensItem } from '@customTypes/lens'\nimport { Product } from '@customTypes/product'\n\nexport const SET_LENS = 'vmmv-ui/configurator/SET_LENS'\nexport const SET_PRODUCT = 'vmmv-ui/configurator/SET_PRODUCT'\nexport const SET_LENSES_LIST = 'vmmv-ui/configurator/SET_LENSES_LIST'\n\nexport interface SetLens {\n type: typeof SET_LENS\n payload: { lens: LensItem | null }\n}\n\nexport interface SetProduct {\n type: typeof SET_PRODUCT\n payload: { product: Product }\n}\n\nexport interface SetLensesList {\n type: typeof SET_LENSES_LIST\n payload: { lensesList: LensItem[] | undefined }\n}\n\nexport const setLens = (lens: LensItem | null): SetLens => {\n return {\n type: SET_LENS,\n payload: {\n lens,\n },\n }\n}\n\nexport const setProduct = (product: Product): SetProduct => {\n return {\n type: SET_PRODUCT,\n payload: {\n product,\n },\n }\n}\n\nexport const setLensList = (lensesList: LensItem[] | undefined): SetLensesList => {\n return {\n type: SET_LENSES_LIST,\n payload: { lensesList },\n }\n}\n\nexport type ConfiguratorActions = SetLens | SetLensesList | SetProduct\n","export const SET_IS_PRIVACY_ACCEPTED = 'vmmv-ui/privacy-policy/SET_IS_PRIVACY_ACCEPTED'\n\nexport interface SetIsPrivacyAccepted {\n type: typeof SET_IS_PRIVACY_ACCEPTED\n}\n\nexport const setIsPrivacyAccepted = (): SetIsPrivacyAccepted => {\n return {\n type: SET_IS_PRIVACY_ACCEPTED,\n }\n}\n\nexport type PrivacyPolicyActionTypes = SetIsPrivacyAccepted\n","import { Product } from '@customTypes/product'\n\nexport const SET_VM_PRODUCTS = 'vmmv-ui/products/SET_VM_PRODUCTS'\n\nexport interface SetVmProducts {\n type: typeof SET_VM_PRODUCTS\n payload: { vmProducts: Product[] }\n}\n\nexport const setVmProducts = (vmProducts: Product[]): SetVmProducts => {\n return {\n type: SET_VM_PRODUCTS,\n payload: {\n vmProducts,\n },\n }\n}\n\nexport type ProductsActionTypes = SetVmProducts\n","import { ActivePanelName } from '@customTypes/transition'\nimport { VtoPage } from '@customTypes/vtoPage'\nexport const SET_VISIBILITY_TERMS_CONDITIONS_MODAL =\n 'vmmv-ui/ui/SET_VISIBILITY_TERMS_CONDITIONS_MODAL'\nexport const SET_VISIBILITY_PRIVACY_POLICY_MODAL = 'vmmv-ui/ui/SET_VISIBILITY_PRIVACY_POLICY_MODAL'\nexport const SET_VISIBILITY_BIPA_MODAL = 'vmmv-ui/ui/SET_VISIBILITY_BIPA_MODAL'\nexport const SET_QR_CODE_MODAL_VISIBILITY = 'vmmv-ui/ui/SET_QR_CODE_MODAL_VISIBILITY'\nexport const SET_TRANSITION_VIEW_CAROUSEL = 'vmmv-ui/ui/SET_TRANSITION_VIEW_CAROUSEL'\nexport const SET_MENU_VISIBILITY = 'vmmv-ui/ui/SET_MENU_VISIBILITY'\nexport const SET_MODAL_VISIBILITY = 'vmmv-ui/ui/SET_MODAL_VISIBILITY'\nexport const SET_VTO_PAGE = 'vmmv-ui/ui/SET_VTO_PAGE'\nexport const RESET_UI_STATE = 'vmmv-ui/ui/RESET_UI_STATE'\n\nexport interface SetVisibilityBipaModal {\n type: typeof SET_VISIBILITY_BIPA_MODAL\n payload: { visible: boolean }\n}\n\nexport const setVisibilityBipaModal = (visible: boolean): SetVisibilityBipaModal => {\n return {\n type: SET_VISIBILITY_BIPA_MODAL,\n payload: {\n visible,\n },\n }\n}\n\nexport interface SetVisibilityPrivacyPolicyModal {\n type: typeof SET_VISIBILITY_PRIVACY_POLICY_MODAL\n payload: { visible: boolean }\n}\n\nexport const setVisibilityPrivacyPolicyModal = (\n visible: boolean\n): SetVisibilityPrivacyPolicyModal => {\n return {\n type: SET_VISIBILITY_PRIVACY_POLICY_MODAL,\n payload: {\n visible,\n },\n }\n}\n\nexport interface SetVisibilityTermsConditionsModal {\n type: typeof SET_VISIBILITY_TERMS_CONDITIONS_MODAL\n payload: { visible: boolean }\n}\n\nexport const setVisibilityTermsConditionsModal = (\n visible: boolean\n): SetVisibilityTermsConditionsModal => {\n return {\n type: SET_VISIBILITY_TERMS_CONDITIONS_MODAL,\n payload: {\n visible,\n },\n }\n}\n\nexport interface SetQRCodeModalVisibility {\n type: typeof SET_QR_CODE_MODAL_VISIBILITY\n payload: { visible: boolean }\n}\n\nexport const setQRCodeModalVisibility = (visible: boolean): SetQRCodeModalVisibility => {\n return {\n type: SET_QR_CODE_MODAL_VISIBILITY,\n payload: {\n visible,\n },\n }\n}\n\nexport interface SetTransitionViewCarousel {\n type: typeof SET_TRANSITION_VIEW_CAROUSEL\n payload: { activeName: ActivePanelName }\n}\n\nexport const setTransitionViewCarousel = (\n activeName: ActivePanelName\n): SetTransitionViewCarousel => {\n return {\n type: SET_TRANSITION_VIEW_CAROUSEL,\n payload: {\n activeName,\n },\n }\n}\nexport interface SetModalVisibility {\n type: typeof SET_MODAL_VISIBILITY\n payload: { visible: boolean }\n}\n\nexport const setModalVisibility = (visible: boolean): SetModalVisibility => {\n return {\n type: SET_MODAL_VISIBILITY,\n payload: {\n visible,\n },\n }\n}\n\nexport interface SetMenuVisibility {\n type: typeof SET_MENU_VISIBILITY\n payload: { visible: boolean }\n}\n\nexport const setMenuVisibility = (visible: boolean): SetMenuVisibility => {\n return {\n type: SET_MENU_VISIBILITY,\n payload: {\n visible,\n },\n }\n}\n\nexport interface SetVtoPage {\n type: typeof SET_VTO_PAGE\n payload: { vtoPage: VtoPage }\n}\n\nexport const setVtoPage = (vtoPage: VtoPage): SetVtoPage => {\n return {\n type: SET_VTO_PAGE,\n payload: { vtoPage },\n }\n}\n\nexport interface ResetUiState {\n type: typeof RESET_UI_STATE\n}\n\nexport const resetUiState = (): ResetUiState => {\n return {\n type: RESET_UI_STATE,\n }\n}\n\nexport type UIActionTypes =\n | SetVisibilityTermsConditionsModal\n | SetVisibilityBipaModal\n | SetVisibilityPrivacyPolicyModal\n | SetQRCodeModalVisibility\n | SetTransitionViewCarousel\n | SetMenuVisibility\n | SetModalVisibility\n | SetVtoPage\n | ResetUiState\n","export const TOGGLE_WISHLIST = 'vmmv-ui/wishlist/TOGGLE_WISHLIST'\nexport const SET_WISHLIST = 'vmmv-ui/wishlist/SET_WISHLIST'\n\nexport interface SetWishlist {\n type: typeof SET_WISHLIST\n payload: { wishlist: string[] }\n}\n\nexport interface ToggleWishlist {\n type: typeof TOGGLE_WISHLIST\n payload: { upc: string }\n}\n\nexport const setWishlist = (wishlist: string[]): SetWishlist => {\n return {\n type: SET_WISHLIST,\n payload: {\n wishlist,\n },\n }\n}\n\nexport const toggleWishlist = (upc: string): ToggleWishlist => {\n return {\n type: TOGGLE_WISHLIST,\n payload: {\n upc,\n },\n }\n}\n\nexport type WishlistActionTypes = ToggleWishlist | SetWishlist\n","import {\n createStore,\n compose,\n StoreEnhancer,\n StoreEnhancerStoreCreator,\n applyMiddleware,\n Middleware,\n} from 'redux'\nimport rootReducer from './reducers'\nimport { persistReducers, loadState } from './localStorage'\n\nconst initialState = loadState()\n\nconst enhancers: StoreEnhancer[] = []\nconst middleware: Middleware[] = []\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nlet composeWithDevTools: (...args: I) => StoreEnhancer\nif (process.env.NODE_ENV !== 'development') {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n composeWithDevTools = require('redux-devtools-extension/logOnlyInProduction').composeWithDevTools\n} else {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n composeWithDevTools = require('redux-devtools-extension').composeWithDevTools\n}\n\nconst composedEnhancers = compose(\n applyMiddleware(...middleware),\n ...enhancers\n)\n\nconst initStore = (initState = initialState) => {\n return createStore(rootReducer, initState, composeWithDevTools(composedEnhancers))\n}\n\nexport const store = initStore(initialState)\n\npersistReducers(store, 'animationApp')\n\nexport type AppStore = ReturnType\nexport type AppState = ReturnType\n","import { ActivePanelName } from '@customTypes/transition'\nimport { VtoPage } from '@customTypes/vtoPage'\nimport {\n RESET_UI_STATE,\n SET_MENU_VISIBILITY,\n SET_MODAL_VISIBILITY,\n SET_QR_CODE_MODAL_VISIBILITY,\n SET_TRANSITION_VIEW_CAROUSEL,\n SET_VISIBILITY_BIPA_MODAL,\n SET_VISIBILITY_PRIVACY_POLICY_MODAL,\n SET_VISIBILITY_TERMS_CONDITIONS_MODAL,\n SET_VTO_PAGE,\n UIActionTypes,\n} from '../actions/ui'\n\nexport interface UIState {\n isPrivacyPolicyModalVisible: boolean\n isBipaModalVisible: boolean\n isTermsConditionsVisible: boolean\n isQRCodeModalVisible: boolean\n activeName: ActivePanelName | null\n isMenuVisible: boolean\n isModalVisible: boolean\n vtoPage: VtoPage\n}\n\nconst initialState: UIState = {\n isTermsConditionsVisible: false,\n isPrivacyPolicyModalVisible: false,\n isBipaModalVisible: false,\n isQRCodeModalVisible: false,\n activeName: null,\n isMenuVisible: false,\n isModalVisible: false,\n vtoPage: 'off',\n}\n\nexport default (state = initialState, action: UIActionTypes) => {\n switch (action.type) {\n case SET_VISIBILITY_TERMS_CONDITIONS_MODAL: {\n return {\n ...state,\n isTermsConditionsVisible: action.payload.visible,\n }\n }\n case SET_VISIBILITY_PRIVACY_POLICY_MODAL: {\n return {\n ...state,\n isPrivacyPolicyModalVisible: action.payload.visible,\n }\n }\n case SET_VISIBILITY_BIPA_MODAL: {\n return {\n ...state,\n isBipaModalVisible: action.payload.visible,\n }\n }\n case SET_QR_CODE_MODAL_VISIBILITY: {\n return {\n ...state,\n isQRCodeModalVisible: action.payload.visible,\n }\n }\n case SET_TRANSITION_VIEW_CAROUSEL: {\n return {\n ...state,\n activeName: action.payload.activeName,\n }\n }\n case SET_MENU_VISIBILITY: {\n return {\n ...state,\n isMenuVisible: action.payload.visible,\n }\n }\n case SET_MODAL_VISIBILITY: {\n return {\n ...state,\n isModalVisible: action.payload.visible,\n }\n }\n case SET_VTO_PAGE: {\n return {\n ...state,\n vtoPage: action.payload.vtoPage,\n }\n }\n case RESET_UI_STATE: {\n return {\n ...initialState,\n }\n }\n default:\n return state\n }\n}\n","import { Queue } from '@customTypes/animationApp'\nimport {\n AnimationAppActionTypes,\n SET_CURRENT_ANIMATION,\n SET_COMPLETE_ANIMATION,\n RESTART_MENU_ANIMATION,\n} from '@store/actions/animationApp'\n\ninterface AnimationAppState {\n animationQueue: Queue[]\n currentAnimation: Queue | null\n isComplete: boolean\n}\n\n// Ordered queue\nconst queue: Queue[] = [\n 'menu',\n 'transitionBtn',\n 'transitionLabel',\n 'decreaseOpacity',\n 'increaseOpacity',\n]\n\n// Glasses on -> menu visible -> 3sec -> menu close -> -> transition view btn is expand -> 3 sec -> transition btn short\n// -> click transition btn -> labels expand -> 3 sec -> labels short -> 4sec -> decrease transition opacity -> 4sec -> increase transition opacity\n\nconst initialState: AnimationAppState = {\n animationQueue: queue,\n currentAnimation: null,\n isComplete: false,\n}\n\nconst animationApp = (state = initialState, action: AnimationAppActionTypes) => {\n switch (action.type) {\n case SET_CURRENT_ANIMATION: {\n const currentAnimation = action.payload.currentAnimation\n const queue = state.animationQueue.filter(q => q !== currentAnimation)\n return {\n ...state,\n animationQueue: queue,\n currentAnimation,\n }\n }\n case SET_COMPLETE_ANIMATION: {\n return {\n ...state,\n isComplete: true,\n }\n }\n case RESTART_MENU_ANIMATION: {\n const currentAnim = state.currentAnimation\n const queue = state.animationQueue\n\n const isMenuAnim = currentAnim === 'menu'\n\n return {\n ...state,\n animationQueue: !!currentAnim && !isMenuAnim ? [currentAnim, ...queue] : [...queue],\n currentAnimation: 'menu',\n isComplete: false,\n }\n }\n default:\n return state\n }\n}\n\nexport default animationApp\n","import { isPrivacyCookieAccepted } from '@utils/cookies'\nimport { SET_IS_PRIVACY_ACCEPTED, PrivacyPolicyActionTypes } from '../actions/privacyPolicy'\n\nexport interface UIState {\n isPrivacyAccepted: boolean\n}\n\nconst initialState: UIState = {\n isPrivacyAccepted: isPrivacyCookieAccepted(),\n}\n\nexport default (state = initialState, action: PrivacyPolicyActionTypes) => {\n switch (action.type) {\n case SET_IS_PRIVACY_ACCEPTED: {\n return {\n ...state,\n isPrivacyAccepted: true,\n }\n }\n default:\n return state\n }\n}\n","import { Product } from '@customTypes/product'\nimport { SET_VM_PRODUCTS, ProductsActionTypes } from '../actions/products'\n\nexport interface ProductsState {\n vmProducts: Product[]\n}\n\nconst initialState: ProductsState = {\n vmProducts: [],\n}\n\nconst products = (state = initialState, action: ProductsActionTypes) => {\n switch (action.type) {\n case SET_VM_PRODUCTS: {\n return {\n ...state,\n vmProducts: action.payload.vmProducts,\n }\n }\n default:\n return state\n }\n}\n\nexport default products\n","import { WishlistActionTypes, TOGGLE_WISHLIST, SET_WISHLIST } from '../actions/wishlist'\n\nexport interface WishlistState {\n wishlist: string[]\n}\n\nconst initialState: WishlistState = {\n wishlist: [],\n}\n\nconst wishlist = (state = initialState, action: WishlistActionTypes) => {\n switch (action.type) {\n case SET_WISHLIST: {\n return {\n ...state,\n wishlist: action.payload.wishlist,\n }\n }\n case TOGGLE_WISHLIST: {\n const wishlisted = state.wishlist.includes(action.payload.upc)\n\n if (!wishlisted) {\n return {\n ...state,\n wishlist: Array.from(new Set([...state.wishlist, action.payload.upc])),\n }\n }\n const newWishlist = state.wishlist.filter(upc => upc !== action.payload.upc)\n return {\n ...state,\n wishlist: newWishlist,\n }\n }\n default:\n return state\n }\n}\n\nexport default wishlist\n","import { Product } from '@customTypes/product'\nimport {\n ConfiguratorActions,\n SET_LENS,\n SET_LENSES_LIST,\n SET_PRODUCT,\n} from '../actions/configurator'\n\nimport { LensItem } from '@customTypes/lens'\n\nexport interface ConfiguratorState {\n lens: LensItem | null\n currentProduct: Product | null\n lensesList?: LensItem[]\n}\n\nconst initialState: ConfiguratorState = {\n lens: null,\n currentProduct: null,\n}\n\nexport default (state = initialState, action: ConfiguratorActions) => {\n switch (action.type) {\n case SET_LENS: {\n return {\n ...state,\n lens: action.payload.lens,\n }\n }\n case SET_PRODUCT: {\n return {\n ...state,\n currentProduct: action.payload.product,\n }\n }\n case SET_LENSES_LIST: {\n return {\n ...state,\n lensesList: action.payload.lensesList,\n }\n }\n default:\n return state\n }\n}\n","import { combineReducers } from 'redux'\nimport ui from './ui'\nimport animationApp from './animationApp'\nimport privacyPolicy from './privacyPolicy'\nimport products from './products'\nimport wishlist from './wishlist'\nimport configurator from './configurator'\n\nconst rootReducer = combineReducers({\n ui,\n animationApp,\n privacyPolicy,\n products,\n wishlist,\n configurator,\n})\n\nexport default rootReducer\n","import { AppStore, AppState } from './index'\n\nconst LOCAL_STATE_VAR_NAME = 'virtual-mirror-expirience'\n\nexport const loadState = (): Partial => {\n try {\n const serializedState = localStorage.getItem(LOCAL_STATE_VAR_NAME)\n if (serializedState === null) {\n return {}\n }\n return JSON.parse(serializedState)\n } catch (err) {\n return {}\n }\n}\n\nexport const saveState = (state: AppState | Record) => {\n try {\n const serializedState = JSON.stringify(state)\n localStorage.setItem(LOCAL_STATE_VAR_NAME, serializedState)\n } catch {\n // ignore write errors\n }\n}\n\nexport const resetLocalStorageState = () => saveState({})\n\ntype reducerKeys = keyof AppState\n\nexport const persistReducers = (store: AppStore, ...reducers: reducerKeys[]) => {\n let prevState: AppState\n store.subscribe(() => {\n const currState = store.getState()\n const stateHasChanged = prevState\n ? reducers.reduce(\n (hasChanged, reducer) => hasChanged || prevState[reducer] !== currState[reducer],\n false\n )\n : true\n\n prevState = currState\n\n if (stateHasChanged) {\n saveState(\n reducers.reduce(\n (state, reducer) => ({ ...state, [reducer]: currState[reducer] }),\n {}\n ) as AppState\n )\n }\n })\n}\n","import { createGlobalStyle } from 'styled-components'\n\nexport const GlobalStyles = createGlobalStyle`\n html {\n\n --vm-default-font: HelveticaNeue;\n --vm-default-font-bold: HelveticaNeue-Bold;\n --vm-default-font-medium: HelveticaNeue-Medium;\n\n /* New variables */\n\n --vm-primary-white-100: rgb(255 255 255);\n --vm-primary-white-30: rgba(255, 255, 255, 0.3);\n\n --vm-primary-black-100: rgb(0 0 0);\n --vm-primary-black-65: rgba(0, 0, 0, 0.65);\n\n --vm-secondary-white-100: rgb(255 255 255);\n --vm-secondary-black-100: rgb(0 0 0);\n \n --vm-loader-dash-color: var(--vm-primary-black-100);\n\n /* Use old variables to ensure backward compatibility */\n --vm-components-footer-desktop-bg: var(--vm-secondary-white-100);\n --vm-components-footer-desktop-text: var(--vm-secondary-black-100);\n\n --vm-components-footer-mobile-bg: var(--vm-primary-black-65);\n --vm-components-footer-mobile-text: var(--vm-primary-white-100);\n\n --vm-components-icon-mobile-bg: var(--vm-primary-white-30);\n --vm-components-icon-mobile-fill: var(--vm-primary-white-100);\n\n --vm-components-icon-desktop-bg: var(--vm-primary-black-100);\n --vm-components-icon-desktop-fill: var(--vm-primary-white-100);\n\n --vm-components-action-photo-bg: var(--vm-secondary-white-100);\n --vm-components-action-photo-fill: var(--vm-secondary-black-100);\n\n --vm-components-action-video-bg: var(--vm-primary-black-100);\n --vm-components-action-video-text: var(--vm-primary-white-100);\n\n --vm-components-rx-cta-bg: var(--vm-primary-black-100);\n --vm-components-rx-cta-text: var(--vm-primary-white-100);\n\n --vm-components-add-to-cart-cta-bg: var(--vm-secondary-white-100);\n --vm-components-add-to-cart-cta-text: var(--vm-secondary-black-100);\n\n --vm-components-footer-desktop-price-full: var(--vm-secondary-black-100);\n --vm-components-footer-desktop-price-new: var(--vm-secondary-black-100);\n\n --vm-components-footer-mobile-price-full: var(--vm-secondary-white-100);\n --vm-components-footer-mobile-price-new: var(--vm-secondary-white-100);\n }\n`\n\nexport const device = {\n large: '1224px',\n medium: '768px',\n small: '376px',\n}\n\nexport const theme = {\n palette: {\n lightgray: '#cdcdcd',\n gray: {\n 100: 'rgb(148, 148, 148)',\n 70: 'rgba(148, 148, 148, .7)',\n 50: 'rgba(148, 148, 148, .5)',\n 40: 'rgba(148, 148, 148, .4)',\n },\n white: {\n 100: 'rgb(255 255 255)',\n 90: 'rgba(255, 255, 255, 0.89)',\n 70: 'rgba(255, 255, 255, 0.7)',\n 50: 'rgba(255, 255, 255, 0.55)',\n 40: 'rgba(255, 255, 255, 0.4)',\n },\n black: '#000',\n pinkRed: '#e84159',\n blueberry: '#8f73ff',\n whiteSmoke: '#f6f6f6',\n dodgerblue: 'dodgerblue',\n abbey: '#515c62',\n darkGray: '#a4a4a4',\n silver: '#D0D0D0',\n error: '#c83430',\n primary: {\n white: {\n 100: 'var(--vm-primary-white-100)',\n 30: 'var(--vm-primary-white-30)',\n },\n black: {\n 100: 'var(--vm-primary-black-100)',\n 65: 'var(--vm-primary-black-65)',\n },\n main: 'var(--vm-primary-main)',\n light: 'var(--vm-primary-light)',\n text: 'var(--vm-primary-text)',\n },\n secondary: {\n white: {\n 100: 'var(--vm-secondary-white-100)',\n },\n black: {\n 100: 'var(--vm-secondary-black-100)',\n },\n main: 'var(--vm-secondary-main)',\n },\n },\n media: {\n large: `@media only screen and (min-width: ${device.large})`,\n medium: `@media only screen and (min-width: ${device.medium})`,\n small: `@media only screen and (min-width: ${device.small})`,\n ipad: {\n '9.7':\n '@media only screen and (min-device-width: 712px) and (max-device-width: 1024px) and (orientation: portrait)',\n '11': '@media only screen and (min-device-width: 834px) and (max-device-height: 1194px) and (orientation: portrait)',\n '12.9':\n '@media only screen and (min-device-width: 1024px) and (max-device-height: 1366px) and (orientation: portrait)',\n },\n },\n fonts: {\n title: 'bold normal 28px/normal var(--vm-default-font)',\n titleSmall: 'bold normal 20px/normal var(--vm-default-font)',\n heading: 'normal normal 500 32px/normal var(--vm-default-font-bold), sans-serif',\n headingSmall: 'normal normal 500 22px/normal var(--vm-default-font), sans-serif',\n headingMediumBold: 'normal normal bold 24px/normal var(--vm-default-font), sans-serif',\n paragraph: 'normal normal 200 16px/normal var(--vm-default-font), sans-serif',\n paragraphBold: 'normal normal bold 16px/normal var(--vm-default-font-bold), sans-serif',\n paragraphSmall: 'normal normal 200 12px/normal var(--vm-default-font), sans-serif',\n spanBold: 'normal normal bold 14px/normal var(--vm-default-font-bold), sans-serif',\n span: 'normal normal 200 14px/normal var(--vm-default-font), sans-serif',\n buttonText: 'normal normal 200 12px/18px var(--vm-default-font-medium), sans-serif',\n buttonTextLink: 'normal normal 200 12px/16px var(--vm-default-font), sans-serif;',\n qrCodeTitle: 'normal normal bold 20px / normal var(--vm-default-font);',\n },\n typography: {},\n}\n","const ML_PROCESS_IMAGE_CONSENT = 'MlProcessImageConsent'\nconst BASIC_IMAGE_CONSENT = 'BasicImageConsent'\n\n//This function is needed to turn off the default privacy policy modal from FrameAdvisor capture app\nexport const setPrivacyAcceptedCookie = () =>\n (document.cookie = `${ML_PROCESS_IMAGE_CONSENT}=true;path=/`)\n\nconst getCookie = (field: string) => {\n const cookieArr = document.cookie.split(';')\n\n const cookieObj: Record = {}\n cookieArr.forEach(el => {\n const newl = el.split('=')\n cookieObj[newl[0].trim()] = newl[1]\n })\n\n return cookieObj[field]\n}\n\nexport const isPrivacyCookieAccepted = () =>\n getCookie(BASIC_IMAGE_CONSENT) === 'true' || isPrivacyCookieAcceptedFromFa()\n\n// to check if privacy policy in FrameAdvisor capture is accepted\nexport const isPrivacyCookieAcceptedFromFa = () => getCookie(ML_PROCESS_IMAGE_CONSENT) === 'true'\n","import { Color, Product } from '@customTypes/product'\n\nexport const filterColors = (identifier: string[], colors: Color[], isClen = false) => {\n return colors.filter(({ colorCode, clen }) => {\n return isClen && !!clen ? identifier.includes(clen) : identifier.includes(colorCode)\n })\n}\n\nexport const getAvailableColors = (product: Product | null, colors: Color[]) => {\n const { transitionLens } = product || {}\n const { availableColors, availableClens } = transitionLens || {}\n\n const identifier = availableColors || availableClens || []\n const isClen = !!availableClens && availableClens.length > 0 && availableColors === undefined\n\n return filterColors(identifier, colors, isClen)\n}\n\nexport const findColor = (identifier: string, colorsCatalog: Color[]) => {\n return colorsCatalog.find(c => c.colorCode === identifier || c.clen === identifier)\n}\n","import { Config } from '@customTypes/config'\nimport { getRegion } from './region'\n\nexport const fallbackLanguage = (config: Config) => {\n const currentRegion = getRegion(config)\n\n if (currentRegion === 'EU') return 'en-EU'\n else if (currentRegion === 'AU') return 'en-AU'\n\n return 'en-US'\n}\n","import { Config } from '@customTypes/config'\n\nconst BIPA_REGION_VALUES = ['us', 'na']\n\nexport const checkIsRegionUS = (config: Config): boolean => {\n const {\n store: { region },\n store: { countryId },\n } = config\n\n let where: Array = [region || '', countryId || '']\n\n if (config.analytics) {\n where = where.concat(config.analytics.storeRegion || '')\n }\n\n if (where.every(item => item === '')) {\n where = where.concat('us')\n }\n\n return where.some(current => BIPA_REGION_VALUES.includes(current.toLowerCase()))\n}\n\nexport const checkIsRegionANZ = (config: Config): boolean => {\n const {\n store: { region },\n store: { countryId },\n } = config\n\n let where: Array = [region || '', countryId || '']\n\n if (config.analytics) {\n where = where.concat(config.analytics.storeRegion || '')\n }\n\n return where.some(current => current.toLowerCase() === 'anz')\n}\n\nexport const getRegion = (config: Config) => {\n const validRegion = ['US', 'EU', 'AU']\n\n const {\n store: { region },\n analytics,\n } = config || {}\n\n const { storeRegion } = analytics || {}\n\n const currentRegion = region || storeRegion || 'US'\n\n return validRegion.indexOf(currentRegion) > -1 ? currentRegion : 'EU' // meaning the region is the rest of the world so we use EU\n}\n","export const availableMode = () => '/'\nexport const liveTryOn = () => '/live-try-on'\nexport const pictureMode = (stepId?: string) =>\n stepId ? `/picture-mode/${stepId}` : '/picture-mode'\nexport const videoMode = (stepId?: string) => (stepId ? `/video-mode/${stepId}` : '/video-mode')\nexport const videoModeView = () => 'video-mode-view'\nexport const videoScan = () => 'video-scan'\nexport const uploadInstructions = () => 'upload-instructions'\nexport const takePicture = () => 'take-picture'\nexport const takePictureInstructions = () => 'take-picture-instructions'\nexport const pictureModeView = () => 'picture-mode-view'\nexport const privacyPolicy = () => '/privacy-policy'\nexport const pictureVideoModeError = () => 'error'\n","import { Matrix3 } from './Matrix3.js';\nimport { Vector3 } from './Vector3.js';\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\tthis.isPlane = true;\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nexport { Plane };\n","import { Vector3 } from './Vector3.js';\nimport { Sphere } from './Sphere.js';\nimport { Plane } from './Plane.js';\n\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _vector = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere.center.set( 0, 0, 0 );\n\t\t_sphere.radius = 0.7071067811865476;\n\t\t_sphere.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n\nexport { Frustum };\n","function WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = gl.HALF_FLOAT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\n\nexport { WebGLAttributes };\n","function WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\tlet forceUpdate = false;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( object, geometry, program, index );\n\n\t\t\tif ( updateBuffers ) saveCache( object, geometry, program, index );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tif ( updateBuffers || forceUpdate ) {\n\n\t\t\tforceUpdate = false;\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( object, geometry, program, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tconst cachedAttribute = cachedAttributes[ name ];\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\t\tif ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( object, geometry, program, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet attribute = attributes[ name ];\n\n\t\t\t\tif ( attribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tconst data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif ( attribute && attribute.data ) {\n\n\t\t\t\t\tdata.data = attribute.data;\n\n\t\t\t\t}\n\n\t\t\t\tcache[ name ] = data;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === gl.INT || type === gl.UNSIGNED_INT ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\t\tforceUpdate = true;\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatibility\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\n\nexport { WebGLBindingStates };\n","function WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n\nexport { WebGLBufferRenderer };\n","function WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tconst maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tconst maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tconst maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tconst maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tconst maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tconst maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tconst maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( gl.MAX_SAMPLES ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\n\n\t\tdrawBuffers: drawBuffers,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\n\nexport { WebGLCapabilities };\n","import { Matrix3 } from '../../math/Matrix3.js';\nimport { Plane } from '../../math/Plane.js';\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\n\nexport { WebGLClipping };\n","import { Vector3 } from './Vector3.js';\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector.dot( this.direction );\n\t\tconst d2 = _vector.dot( _vector ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\t\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nexport { Ray };\n","import { Vector3 } from './Vector3.js';\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0.subVectors( a, b );\n\t\ttarget.cross( _v0 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0.subVectors( c, a );\n\t\t_v1.subVectors( b, a );\n\t\t_v2.subVectors( point, a );\n\n\t\tconst dot00 = _v0.dot( _v0 );\n\t\tconst dot01 = _v0.dot( _v1 );\n\t\tconst dot02 = _v0.dot( _v2 );\n\t\tconst dot11 = _v1.dot( _v1 );\n\t\tconst dot12 = _v1.dot( _v2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3 );\n\n\t\treturn ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3.x );\n\t\ttarget.addScaledVector( uv2, _v3.y );\n\t\ttarget.addScaledVector( uv3, _v3.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0.subVectors( c, b );\n\t\t_v1.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0.cross( _v1 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0.subVectors( this.c, this.b );\n\t\t_v1.subVectors( this.a, this.b );\n\n\t\treturn _v0.cross( _v1 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nexport { Triangle };\n","import { EventDispatcher } from '../core/EventDispatcher.js';\nimport { FrontSide, NormalBlending, LessEqualDepth, AddEquation, OneMinusSrcAlphaFactor, SrcAlphaFactor, AlwaysStencilFunc, KeepStencilOp } from '../constants.js';\nimport * as MathUtils from '../math/MathUtils.js';\n\nlet materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isMaterial = true;\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Material: \\'' + key + '\\' parameter is undefined.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': \\'' + key + '\\' is not a property of this material.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\t\tdata.colorWrite = this.colorWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nexport { Material };\n","import { SRGBColorSpace, LinearSRGBColorSpace } from '../constants.js';\n\nexport function SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nexport function LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\n// JavaScript RGB-to-RGB transforms, defined as\n// FN[InputColorSpace][OutputColorSpace] callback functions.\nconst FN = {\n\t[ SRGBColorSpace ]: { [ LinearSRGBColorSpace ]: SRGBToLinear },\n\t[ LinearSRGBColorSpace ]: { [ SRGBColorSpace ]: LinearToSRGB },\n};\n\nexport const ColorManagement = {\n\n\tlegacyMode: true,\n\n\tget workingColorSpace() {\n\n\t\treturn LinearSRGBColorSpace;\n\n\t},\n\n\tset workingColorSpace( colorSpace ) {\n\n\t\tconsole.warn( 'THREE.ColorManagement: .workingColorSpace is readonly.' );\n\n\t},\n\n\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\tif ( this.legacyMode || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tif ( FN[ sourceColorSpace ] && FN[ sourceColorSpace ][ targetColorSpace ] !== undefined ) {\n\n\t\t\tconst fn = FN[ sourceColorSpace ][ targetColorSpace ];\n\n\t\t\tcolor.r = fn( color.r );\n\t\t\tcolor.g = fn( color.g );\n\t\t\tcolor.b = fn( color.b );\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tthrow new Error( 'Unsupported color space conversion.' );\n\n\t},\n\n\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\treturn this.convert( color, this.workingColorSpace, targetColorSpace );\n\n\t},\n\n\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\treturn this.convert( color, sourceColorSpace, this.workingColorSpace );\n\n\t},\n\n};\n","import { clamp, euclideanModulo, lerp } from './MathUtils.js';\nimport { ColorManagement, SRGBToLinear, LinearToSRGB } from './ColorManagement.js';\nimport { SRGBColorSpace, LinearSRGBColorSpace } from '../constants.js';\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _rgb = { r: 0, g: 0, b: 0 };\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction toComponents( source, target ) {\n\n\ttarget.r = source.r;\n\ttarget.g = source.g;\n\ttarget.b = source.b;\n\n\treturn target;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tthis.isColor = true;\n\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b, colorSpace = LinearSRGBColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l, colorSpace = LinearSRGBColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseFloat( color[ 2 ] ) / 100;\n\t\t\t\t\t\tconst l = parseFloat( color[ 3 ] ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l, colorSpace );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\treturn clamp( _rgb.r * 255, 0, 255 ) << 16 ^ clamp( _rgb.g * 255, 0, 255 ) << 8 ^ clamp( _rgb.b * 255, 0, 255 ) << 0;\n\n\t}\n\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target, colorSpace = LinearSRGBColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\tconst r = _rgb.r, g = _rgb.g, b = _rgb.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetRGB( target, colorSpace = LinearSRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\ttarget.r = _rgb.r;\n\t\ttarget.g = _rgb.g;\n\t\ttarget.b = _rgb.b;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ _rgb.r } ${ _rgb.g } ${ _rgb.b })`;\n\n\t\t}\n\n\t\treturn `rgb(${( _rgb.r * 255 ) | 0},${( _rgb.g * 255 ) | 0},${( _rgb.b * 255 ) | 0})`;\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\n\nexport { Color, SRGBToLinear };\n","import { Material } from './Material.js';\nimport { MultiplyOperation } from '../constants.js';\nimport { Color } from '../math/Color.js';\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MeshBasicMaterial };\n","import { Vector3 } from '../math/Vector3.js';\nimport { Vector2 } from '../math/Vector2.js';\nimport { Sphere } from '../math/Sphere.js';\nimport { Ray } from '../math/Ray.js';\nimport { Matrix4 } from '../math/Matrix4.js';\nimport { Object3D } from '../core/Object3D.js';\nimport { Triangle } from '../math/Triangle.js';\nimport { DoubleSide, BackSide } from '../constants.js';\nimport { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';\nimport { BufferGeometry } from '../core/BufferGeometry.js';\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\nconst _tempC = /*@__PURE__*/ new Vector3();\n\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _morphC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv2 = geometry.attributes.uv2;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA.fromBufferAttribute( position, a );\n\t_vB.fromBufferAttribute( position, b );\n\t_vC.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA.add( _morphA );\n\t\t_vB.add( _morphB );\n\t\t_vC.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh ) {\n\n\t\tobject.boneTransform( a, _vA );\n\t\tobject.boneTransform( b, _vB );\n\t\tobject.boneTransform( c, _vC );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv, a );\n\t\t\t_uvB.fromBufferAttribute( uv, b );\n\t\t\t_uvC.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv2, a );\n\t\t\t_uvB.fromBufferAttribute( uv2, b );\n\t\t\t_uvC.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nexport { Mesh };\n","import { BufferGeometry } from '../core/BufferGeometry.js';\nimport { Float32BufferAttribute } from '../core/BufferAttribute.js';\nimport { Vector3 } from '../math/Vector3.js';\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\nexport { BoxGeometry };\n","/**\n * Uniform Utilities\n */\n\nexport function cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nexport function mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\nexport function cloneUniformsGroups( src ) {\n\n\tconst dst = [];\n\n\tfor ( let u = 0; u < src.length; u ++ ) {\n\n\t\tdst.push( src[ u ].clone() );\n\n\t}\n\n\treturn dst;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nexport { UniformsUtils };\n","import { createElementNS } from '../utils.js';\nimport { SRGBToLinear } from '../math/Color.js';\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nexport { ImageUtils };\n","import { Material } from './Material.js';\nimport { cloneUniforms, cloneUniformsGroups } from '../renderers/shaders/UniformsUtils.js';\n\nimport default_vertex from '../renderers/shaders/ShaderChunk/default_vertex.glsl.js';\nimport default_fragment from '../renderers/shaders/ShaderChunk/default_fragment.glsl.js';\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShaderMaterial = true;\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\t\tthis.uniformsGroups = [];\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\t\tthis.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nexport { ShaderMaterial };\n","export default /* glsl */`\nvoid main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}\n`;\n","export default /* glsl */`\nvoid main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}\n`;\n","import { ImageUtils } from '../extras/ImageUtils.js';\nimport * as MathUtils from '../math/MathUtils.js';\n\nclass Source {\n\n\tconstructor( data = null ) {\n\n\t\tthis.isSource = true;\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.data = data;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nexport { Source };\n","import { EventDispatcher } from '../core/EventDispatcher.js';\nimport {\n\tMirroredRepeatWrapping,\n\tClampToEdgeWrapping,\n\tRepeatWrapping,\n\tLinearEncoding,\n\tUnsignedByteType,\n\tRGBAFormat,\n\tLinearMipmapLinearFilter,\n\tLinearFilter,\n\tUVMapping\n} from '../constants.js';\nimport * as MathUtils from '../math/MathUtils.js';\nimport { Vector2 } from '../math/Vector2.js';\nimport { Matrix3 } from '../math/Matrix3.js';\nimport { Source } from './Source.js';\n\nlet textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\t\tsuper();\n\n\t\tthis.isTexture = true;\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.source = new Source( image );\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n\t\tthis.needsPMREMUpdate = false; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n\n\t}\n\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = null;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nexport { Texture };\n","import { EventDispatcher } from '../core/EventDispatcher.js';\nimport { Texture } from '../textures/Texture.js';\nimport { LinearFilter } from '../constants.js';\nimport { Vector4 } from '../math/Vector4.js';\nimport { Source } from '../textures/Source.js';\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass WebGLRenderTarget extends EventDispatcher {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.isWebGLRenderTarget = true;\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\tconst image = { width: width, height: height, depth: 1 };\n\n\t\tthis.texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.flipY = false;\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t\tthis.samples = options.samples !== undefined ? options.samples : 0;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\t\t\tthis.texture.image.depth = depth;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\t// ensure image object is not shared, see #20328\n\n\t\tconst image = Object.assign( {}, source.texture.image );\n\t\tthis.texture.source = new Source( image );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nexport { WebGLRenderTarget };\n","import { Matrix4 } from '../math/Matrix4.js';\nimport { Object3D } from '../core/Object3D.js';\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isCamera = true;\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nexport { Camera };\n","import { Camera } from './Camera.js';\nimport * as MathUtils from '../math/MathUtils.js';\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isPerspectiveCamera = true;\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = MathUtils.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn MathUtils.RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nexport { PerspectiveCamera };\n","import { NoToneMapping } from '../constants.js';\nimport { Object3D } from '../core/Object3D.js';\nimport { Vector3 } from '../math/Vector3.js';\nimport { PerspectiveCamera } from './PerspectiveCamera.js';\n\nconst fov = 90, aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tcameraPY.up.set( 0, 0, 1 );\n\t\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst renderTarget = this.renderTarget;\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst currentToneMapping = renderer.toneMapping;\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.toneMapping = currentToneMapping;\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t\trenderTarget.texture.needsPMREMUpdate = true;\n\n\t}\n\n}\n\nexport { CubeCamera };\n","import { Texture } from './Texture.js';\nimport { CubeReflectionMapping } from '../constants.js';\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nexport { CubeTexture };\n","import { BackSide, LinearFilter, LinearMipmapLinearFilter, NoBlending } from '../constants.js';\nimport { Mesh } from '../objects/Mesh.js';\nimport { BoxGeometry } from '../geometries/BoxGeometry.js';\nimport { ShaderMaterial } from '../materials/ShaderMaterial.js';\nimport { cloneUniforms } from './shaders/UniformsUtils.js';\nimport { WebGLRenderTarget } from './WebGLRenderTarget.js';\nimport { CubeCamera } from '../cameras/CubeCamera.js';\nimport { CubeTexture } from '../textures/CubeTexture.js';\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size = 1, options = {} ) {\n\n\t\tsuper( size, size, options );\n\n\t\tthis.isWebGLCubeRenderTarget = true;\n\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\tthis.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.encoding = texture.encoding;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\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`,\n\n\t\t\tfragmentShader: /* glsl */`\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`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nexport { WebGLCubeRenderTarget };\n","import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';\nimport { WebGLCubeRenderTarget } from '../WebGLCubeRenderTarget.js';\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nexport { WebGLCubeMaps };\n","import { Camera } from './Camera.js';\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isOrthographicCamera = true;\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nexport { OrthographicCamera };\n","import {\n\tCubeReflectionMapping,\n\tCubeRefractionMapping,\n\tCubeUVReflectionMapping,\n\tLinearEncoding,\n\tLinearFilter,\n\tNoToneMapping,\n\tNoBlending,\n\tRGBAFormat,\n\tHalfFloatType\n} from '../constants.js';\n\nimport { BufferAttribute } from '../core/BufferAttribute.js';\nimport { BufferGeometry } from '../core/BufferGeometry.js';\nimport { Mesh } from '../objects/Mesh.js';\nimport { OrthographicCamera } from '../cameras/OrthographicCamera.js';\nimport { PerspectiveCamera } from '../cameras/PerspectiveCamera.js';\nimport { ShaderMaterial } from '../materials/ShaderMaterial.js';\nimport { Vector3 } from '../math/Vector3.js';\nimport { Color } from '../math/Color.js';\nimport { WebGLRenderTarget } from '../renderers/WebGLRenderTarget.js';\nimport { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';\nimport { BoxGeometry } from '../geometries/BoxGeometry.js';\nimport { BackSide } from '../constants.js';\n\nconst LOD_MIN = 4;\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._lodMax = 0;\n\t\tthis._cubeSize = 0;\n\t\tthis._lodPlanes = [];\n\t\tthis._sizeLods = [];\n\t\tthis._sigmas = [];\n\n\t\tthis._blurMaterial = null;\n\t\tthis._cubemapMaterial = null;\n\t\tthis._equirectMaterial = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\n\t\tthis._setSize( 256 );\n\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\t\tcubeUVRenderTarget.depthBuffer = true;\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular, renderTarget = null ) {\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap, renderTarget = null ) {\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\t\t\tthis._compileMaterial( this._cubemapMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\t\t\tthis._compileMaterial( this._equirectMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._dispose();\n\n\t\tif ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();\n\t\tif ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();\n\n\t}\n\n\t// private interface\n\n\t_setSize( cubeSize ) {\n\n\t\tthis._lodMax = Math.floor( Math.log2( cubeSize ) );\n\t\tthis._cubeSize = Math.pow( 2, this._lodMax );\n\n\t}\n\n\t_dispose() {\n\n\t\tif ( this._blurMaterial !== null ) this._blurMaterial.dispose();\n\n\t\tif ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();\n\n\t\tfor ( let i = 0; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tthis._lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture, renderTarget ) {\n\n\t\tif ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {\n\n\t\t\tthis._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );\n\n\t\t} else { // Equirectangular\n\n\t\t\tthis._setSize( texture.image.width / 4 );\n\n\t\t}\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTargets();\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets() {\n\n\t\tconst width = 3 * Math.max( this._cubeSize, 16 * 7 );\n\t\tconst height = 4 * this._cubeSize;\n\n\t\tconst params = {\n\t\t\tmagFilter: LinearFilter,\n\t\t\tminFilter: LinearFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: HalfFloatType,\n\t\t\tformat: RGBAFormat,\n\t\t\tencoding: LinearEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( width, height, params );\n\n\t\tif ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width ) {\n\n\t\t\tif ( this._pingPongRenderTarget !== null ) {\n\n\t\t\t\tthis._dispose();\n\n\t\t\t}\n\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( width, height, params );\n\n\t\t\tconst { _lodMax } = this;\n\t\t\t( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );\n\n\t\t\tthis._blurMaterial = _getBlurShader( _lodMax, width, height );\n\n\t\t}\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.autoClear = false;\n\n\t\tconst backgroundMaterial = new MeshBasicMaterial( {\n\t\t\tname: 'PMREM.Background',\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t} );\n\n\t\tconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\n\t\t\tif ( col === 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col === 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\tconst size = this._cubeSize;\n\n\t\t\t_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\tbackgroundBox.geometry.dispose();\n\t\tbackgroundBox.material.dispose();\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\n\t\t\t}\n\n\t\t\tthis._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t} else {\n\n\t\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;\n\t\tconst mesh = new Mesh( this._lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tconst size = this._cubeSize;\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = this._sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tconst { _lodMax } = this;\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = _lodMax - lodIn;\n\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\n\n\nfunction _createPlanes( lodMax ) {\n\n\tconst lodPlanes = [];\n\tconst sizeLods = [];\n\tconst sigmas = [];\n\n\tlet lod = lodMax;\n\n\tconst totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\tfor ( let i = 0; i < totalLods; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\tsizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > lodMax - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];\n\n\t\t} else if ( i === 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\tsigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 2 );\n\t\tconst min = - texelSize;\n\t\tconst max = 1 + texelSize;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\tlodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { lodPlanes, sizeLods, sigmas };\n\n}\n\nfunction _createRenderTarget( width, height, params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( lodMax, width, height ) {\n\n\tconst weights = new Float32Array( MAX_SAMPLES );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new ShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: {\n\t\t\t'n': MAX_SAMPLES,\n\t\t\t'CUBEUV_TEXEL_WIDTH': 1.0 / width,\n\t\t\t'CUBEUV_TEXEL_HEIGHT': 1.0 / height,\n\t\t\t'CUBEUV_MAX_MIP': `${lodMax}.0`,\n\t\t},\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\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`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\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`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCubemapMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'flipEnvMap': { value: - 1 }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\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`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\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`;\n\n}\n\nexport { PMREMGenerator };\n","import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';\nimport { PMREMGenerator } from '../../extras/PMREMGenerator.js';\n\nfunction WebGLCubeUVMaps( renderer ) {\n\n\tlet cubeUVmaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\tif ( texture.isRenderTargetTexture && texture.needsPMREMUpdate === true ) {\n\n\t\t\t\t\ttexture.needsPMREMUpdate = false;\n\n\t\t\t\t\tlet renderTarget = cubeUVmaps.get( texture );\n\n\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );\n\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( cubeUVmaps.has( texture ) ) {\n\n\t\t\t\t\t\treturn cubeUVmaps.get( texture ).texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\t\tconst renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemapUV = cubeUVmaps.get( texture );\n\n\t\tif ( cubemapUV !== undefined ) {\n\n\t\t\tcubeUVmaps.delete( texture );\n\t\t\tcubemapUV.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeUVmaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nexport { WebGLCubeUVMaps };\n","function WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function ( capabilities ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\n\t\t\t} else {\n\n\t\t\t\tgetExtension( 'WEBGL_depth_texture' );\n\t\t\t\tgetExtension( 'OES_texture_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float_linear' );\n\t\t\t\tgetExtension( 'OES_standard_derivatives' );\n\t\t\t\tgetExtension( 'OES_element_index_uint' );\n\t\t\t\tgetExtension( 'OES_vertex_array_object' );\n\t\t\t\tgetExtension( 'ANGLE_instanced_arrays' );\n\n\t\t\t}\n\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\t\t\tgetExtension( 'WEBGL_multisampled_render_to_texture' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\n\nexport { WebGLExtensions };\n","import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';\nimport { arrayNeedsUint32 } from '../../utils.js';\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\n\nexport { WebGLGeometries };\n","function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n\nexport { WebGLIndexedBufferRenderer };\n","function WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\n\nexport { WebGLInfo };\n","function WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tattributes.update( object.instanceMatrix, gl.ARRAY_BUFFER );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\n\nexport { WebGLObjects };\n","import { Texture } from './Texture.js';\nimport { ClampToEdgeWrapping, NearestFilter } from '../constants.js';\n\nclass DataArrayTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.isDataArrayTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nexport { DataArrayTexture };\n","import { Texture } from './Texture.js';\nimport { ClampToEdgeWrapping, NearestFilter } from '../constants.js';\n\nclass Data3DTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.isData3DTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nexport { Data3DTexture };\n","/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nimport { CubeTexture } from '../../textures/CubeTexture.js';\nimport { Texture } from '../../textures/Texture.js';\nimport { DataArrayTexture } from '../../textures/DataArrayTexture.js';\nimport { Data3DTexture } from '../../textures/Data3DTexture.js';\n\nconst emptyTexture = /*@__PURE__*/ new Texture();\nconst emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();\nconst empty3dTexture = /*@__PURE__*/ new Data3DTexture();\nconst emptyCubeTexture = /*@__PURE__*/ new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array or THREE.VectorN)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2i( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3i( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4i( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array or THREE.VectorN)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2ui( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3ui( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4ui( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || empty3dTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyArrayTexture, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / 3D / Cube / 2DArray)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT3DArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT2DArrayArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] );\n\n\t}\n\n}\n\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3DArray;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArrayArray;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nclass SingleUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass PureArrayUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass StructuredUniform {\n\n\tconstructor( id ) {\n\n\t\tthis.id = id;\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\tsetValue( gl, value, textures ) {\n\n\t\tconst seq = this.seq;\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t\t}\n\n\t}\n\n}\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nclass WebGLUniforms {\n\n\tconstructor( gl, program ) {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t\tconst n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\t\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tsetValue( gl, name, value, textures ) {\n\n\t\tconst u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n\t}\n\n\tsetOptional( gl, object, name ) {\n\n\t\tconst v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t}\n\n\tstatic upload( gl, seq, values, textures ) {\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic seqWithValue( seq, values ) {\n\n\t\tconst r = [];\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n}\n\nexport { WebGLUniforms };\n","function WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nexport { WebGLShader };\n","export default /* glsl */`\n#ifdef USE_ALPHAMAP\n\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n\n#endif\n`;\n","import alphamap_fragment from './ShaderChunk/alphamap_fragment.glsl.js';\nimport alphamap_pars_fragment from './ShaderChunk/alphamap_pars_fragment.glsl.js';\nimport alphatest_fragment from './ShaderChunk/alphatest_fragment.glsl.js';\nimport alphatest_pars_fragment from './ShaderChunk/alphatest_pars_fragment.glsl.js';\nimport aomap_fragment from './ShaderChunk/aomap_fragment.glsl.js';\nimport aomap_pars_fragment from './ShaderChunk/aomap_pars_fragment.glsl.js';\nimport begin_vertex from './ShaderChunk/begin_vertex.glsl.js';\nimport beginnormal_vertex from './ShaderChunk/beginnormal_vertex.glsl.js';\nimport bsdfs from './ShaderChunk/bsdfs.glsl.js';\nimport iridescence_fragment from './ShaderChunk/iridescence_fragment.glsl.js';\nimport bumpmap_pars_fragment from './ShaderChunk/bumpmap_pars_fragment.glsl.js';\nimport clipping_planes_fragment from './ShaderChunk/clipping_planes_fragment.glsl.js';\nimport clipping_planes_pars_fragment from './ShaderChunk/clipping_planes_pars_fragment.glsl.js';\nimport clipping_planes_pars_vertex from './ShaderChunk/clipping_planes_pars_vertex.glsl.js';\nimport clipping_planes_vertex from './ShaderChunk/clipping_planes_vertex.glsl.js';\nimport color_fragment from './ShaderChunk/color_fragment.glsl.js';\nimport color_pars_fragment from './ShaderChunk/color_pars_fragment.glsl.js';\nimport color_pars_vertex from './ShaderChunk/color_pars_vertex.glsl.js';\nimport color_vertex from './ShaderChunk/color_vertex.glsl.js';\nimport common from './ShaderChunk/common.glsl.js';\nimport cube_uv_reflection_fragment from './ShaderChunk/cube_uv_reflection_fragment.glsl.js';\nimport defaultnormal_vertex from './ShaderChunk/defaultnormal_vertex.glsl.js';\nimport displacementmap_pars_vertex from './ShaderChunk/displacementmap_pars_vertex.glsl.js';\nimport displacementmap_vertex from './ShaderChunk/displacementmap_vertex.glsl.js';\nimport emissivemap_fragment from './ShaderChunk/emissivemap_fragment.glsl.js';\nimport emissivemap_pars_fragment from './ShaderChunk/emissivemap_pars_fragment.glsl.js';\nimport encodings_fragment from './ShaderChunk/encodings_fragment.glsl.js';\nimport encodings_pars_fragment from './ShaderChunk/encodings_pars_fragment.glsl.js';\nimport envmap_fragment from './ShaderChunk/envmap_fragment.glsl.js';\nimport envmap_common_pars_fragment from './ShaderChunk/envmap_common_pars_fragment.glsl.js';\nimport envmap_pars_fragment from './ShaderChunk/envmap_pars_fragment.glsl.js';\nimport envmap_pars_vertex from './ShaderChunk/envmap_pars_vertex.glsl.js';\nimport envmap_vertex from './ShaderChunk/envmap_vertex.glsl.js';\nimport fog_vertex from './ShaderChunk/fog_vertex.glsl.js';\nimport fog_pars_vertex from './ShaderChunk/fog_pars_vertex.glsl.js';\nimport fog_fragment from './ShaderChunk/fog_fragment.glsl.js';\nimport fog_pars_fragment from './ShaderChunk/fog_pars_fragment.glsl.js';\nimport gradientmap_pars_fragment from './ShaderChunk/gradientmap_pars_fragment.glsl.js';\nimport lightmap_fragment from './ShaderChunk/lightmap_fragment.glsl.js';\nimport lightmap_pars_fragment from './ShaderChunk/lightmap_pars_fragment.glsl.js';\nimport lights_lambert_fragment from './ShaderChunk/lights_lambert_fragment.glsl.js';\nimport lights_lambert_pars_fragment from './ShaderChunk/lights_lambert_pars_fragment.glsl.js';\nimport lights_pars_begin from './ShaderChunk/lights_pars_begin.glsl.js';\nimport envmap_physical_pars_fragment from './ShaderChunk/envmap_physical_pars_fragment.glsl.js';\nimport lights_toon_fragment from './ShaderChunk/lights_toon_fragment.glsl.js';\nimport lights_toon_pars_fragment from './ShaderChunk/lights_toon_pars_fragment.glsl.js';\nimport lights_phong_fragment from './ShaderChunk/lights_phong_fragment.glsl.js';\nimport lights_phong_pars_fragment from './ShaderChunk/lights_phong_pars_fragment.glsl.js';\nimport lights_physical_fragment from './ShaderChunk/lights_physical_fragment.glsl.js';\nimport lights_physical_pars_fragment from './ShaderChunk/lights_physical_pars_fragment.glsl.js';\nimport lights_fragment_begin from './ShaderChunk/lights_fragment_begin.glsl.js';\nimport lights_fragment_maps from './ShaderChunk/lights_fragment_maps.glsl.js';\nimport lights_fragment_end from './ShaderChunk/lights_fragment_end.glsl.js';\nimport logdepthbuf_fragment from './ShaderChunk/logdepthbuf_fragment.glsl.js';\nimport logdepthbuf_pars_fragment from './ShaderChunk/logdepthbuf_pars_fragment.glsl.js';\nimport logdepthbuf_pars_vertex from './ShaderChunk/logdepthbuf_pars_vertex.glsl.js';\nimport logdepthbuf_vertex from './ShaderChunk/logdepthbuf_vertex.glsl.js';\nimport map_fragment from './ShaderChunk/map_fragment.glsl.js';\nimport map_pars_fragment from './ShaderChunk/map_pars_fragment.glsl.js';\nimport map_particle_fragment from './ShaderChunk/map_particle_fragment.glsl.js';\nimport map_particle_pars_fragment from './ShaderChunk/map_particle_pars_fragment.glsl.js';\nimport metalnessmap_fragment from './ShaderChunk/metalnessmap_fragment.glsl.js';\nimport metalnessmap_pars_fragment from './ShaderChunk/metalnessmap_pars_fragment.glsl.js';\nimport morphcolor_vertex from './ShaderChunk/morphcolor_vertex.glsl.js';\nimport morphnormal_vertex from './ShaderChunk/morphnormal_vertex.glsl.js';\nimport morphtarget_pars_vertex from './ShaderChunk/morphtarget_pars_vertex.glsl.js';\nimport morphtarget_vertex from './ShaderChunk/morphtarget_vertex.glsl.js';\nimport normal_fragment_begin from './ShaderChunk/normal_fragment_begin.glsl.js';\nimport normal_fragment_maps from './ShaderChunk/normal_fragment_maps.glsl.js';\nimport normal_pars_fragment from './ShaderChunk/normal_pars_fragment.glsl.js';\nimport normal_pars_vertex from './ShaderChunk/normal_pars_vertex.glsl.js';\nimport normal_vertex from './ShaderChunk/normal_vertex.glsl.js';\nimport normalmap_pars_fragment from './ShaderChunk/normalmap_pars_fragment.glsl.js';\nimport clearcoat_normal_fragment_begin from './ShaderChunk/clearcoat_normal_fragment_begin.glsl.js';\nimport clearcoat_normal_fragment_maps from './ShaderChunk/clearcoat_normal_fragment_maps.glsl.js';\nimport clearcoat_pars_fragment from './ShaderChunk/clearcoat_pars_fragment.glsl.js';\nimport iridescence_pars_fragment from './ShaderChunk/iridescence_pars_fragment.glsl.js';\nimport output_fragment from './ShaderChunk/output_fragment.glsl.js';\nimport packing from './ShaderChunk/packing.glsl.js';\nimport premultiplied_alpha_fragment from './ShaderChunk/premultiplied_alpha_fragment.glsl.js';\nimport project_vertex from './ShaderChunk/project_vertex.glsl.js';\nimport dithering_fragment from './ShaderChunk/dithering_fragment.glsl.js';\nimport dithering_pars_fragment from './ShaderChunk/dithering_pars_fragment.glsl.js';\nimport roughnessmap_fragment from './ShaderChunk/roughnessmap_fragment.glsl.js';\nimport roughnessmap_pars_fragment from './ShaderChunk/roughnessmap_pars_fragment.glsl.js';\nimport shadowmap_pars_fragment from './ShaderChunk/shadowmap_pars_fragment.glsl.js';\nimport shadowmap_pars_vertex from './ShaderChunk/shadowmap_pars_vertex.glsl.js';\nimport shadowmap_vertex from './ShaderChunk/shadowmap_vertex.glsl.js';\nimport shadowmask_pars_fragment from './ShaderChunk/shadowmask_pars_fragment.glsl.js';\nimport skinbase_vertex from './ShaderChunk/skinbase_vertex.glsl.js';\nimport skinning_pars_vertex from './ShaderChunk/skinning_pars_vertex.glsl.js';\nimport skinning_vertex from './ShaderChunk/skinning_vertex.glsl.js';\nimport skinnormal_vertex from './ShaderChunk/skinnormal_vertex.glsl.js';\nimport specularmap_fragment from './ShaderChunk/specularmap_fragment.glsl.js';\nimport specularmap_pars_fragment from './ShaderChunk/specularmap_pars_fragment.glsl.js';\nimport tonemapping_fragment from './ShaderChunk/tonemapping_fragment.glsl.js';\nimport tonemapping_pars_fragment from './ShaderChunk/tonemapping_pars_fragment.glsl.js';\nimport transmission_fragment from './ShaderChunk/transmission_fragment.glsl.js';\nimport transmission_pars_fragment from './ShaderChunk/transmission_pars_fragment.glsl.js';\nimport uv_pars_fragment from './ShaderChunk/uv_pars_fragment.glsl.js';\nimport uv_pars_vertex from './ShaderChunk/uv_pars_vertex.glsl.js';\nimport uv_vertex from './ShaderChunk/uv_vertex.glsl.js';\nimport uv2_pars_fragment from './ShaderChunk/uv2_pars_fragment.glsl.js';\nimport uv2_pars_vertex from './ShaderChunk/uv2_pars_vertex.glsl.js';\nimport uv2_vertex from './ShaderChunk/uv2_vertex.glsl.js';\nimport worldpos_vertex from './ShaderChunk/worldpos_vertex.glsl.js';\n\nimport * as background from './ShaderLib/background.glsl.js';\nimport * as backgroundCube from './ShaderLib/backgroundCube.glsl.js';\nimport * as cube from './ShaderLib/cube.glsl.js';\nimport * as depth from './ShaderLib/depth.glsl.js';\nimport * as distanceRGBA from './ShaderLib/distanceRGBA.glsl.js';\nimport * as equirect from './ShaderLib/equirect.glsl.js';\nimport * as linedashed from './ShaderLib/linedashed.glsl.js';\nimport * as meshbasic from './ShaderLib/meshbasic.glsl.js';\nimport * as meshlambert from './ShaderLib/meshlambert.glsl.js';\nimport * as meshmatcap from './ShaderLib/meshmatcap.glsl.js';\nimport * as meshnormal from './ShaderLib/meshnormal.glsl.js';\nimport * as meshphong from './ShaderLib/meshphong.glsl.js';\nimport * as meshphysical from './ShaderLib/meshphysical.glsl.js';\nimport * as meshtoon from './ShaderLib/meshtoon.glsl.js';\nimport * as points from './ShaderLib/points.glsl.js';\nimport * as shadow from './ShaderLib/shadow.glsl.js';\nimport * as sprite from './ShaderLib/sprite.glsl.js';\n\nexport const ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tiridescence_fragment: iridescence_fragment,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_fragment: lights_lambert_fragment,\n\tlights_lambert_pars_fragment: lights_lambert_pars_fragment,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphcolor_vertex: morphcolor_vertex,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tiridescence_pars_fragment: iridescence_pars_fragment,\n\toutput_fragment: output_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: background.vertex,\n\tbackground_frag: background.fragment,\n\tbackgroundCube_vert: backgroundCube.vertex,\n\tbackgroundCube_frag: backgroundCube.fragment,\n\tcube_vert: cube.vertex,\n\tcube_frag: cube.fragment,\n\tdepth_vert: depth.vertex,\n\tdepth_frag: depth.fragment,\n\tdistanceRGBA_vert: distanceRGBA.vertex,\n\tdistanceRGBA_frag: distanceRGBA.fragment,\n\tequirect_vert: equirect.vertex,\n\tequirect_frag: equirect.fragment,\n\tlinedashed_vert: linedashed.vertex,\n\tlinedashed_frag: linedashed.fragment,\n\tmeshbasic_vert: meshbasic.vertex,\n\tmeshbasic_frag: meshbasic.fragment,\n\tmeshlambert_vert: meshlambert.vertex,\n\tmeshlambert_frag: meshlambert.fragment,\n\tmeshmatcap_vert: meshmatcap.vertex,\n\tmeshmatcap_frag: meshmatcap.fragment,\n\tmeshnormal_vert: meshnormal.vertex,\n\tmeshnormal_frag: meshnormal.fragment,\n\tmeshphong_vert: meshphong.vertex,\n\tmeshphong_frag: meshphong.fragment,\n\tmeshphysical_vert: meshphysical.vertex,\n\tmeshphysical_frag: meshphysical.fragment,\n\tmeshtoon_vert: meshtoon.vertex,\n\tmeshtoon_frag: meshtoon.fragment,\n\tpoints_vert: points.vertex,\n\tpoints_frag: points.fragment,\n\tshadow_vert: shadow.vertex,\n\tshadow_frag: shadow.fragment,\n\tsprite_vert: sprite.vertex,\n\tsprite_frag: sprite.fragment\n};\n","export default /* glsl */`\n#ifdef USE_ALPHAMAP\n\n\tuniform sampler2D alphaMap;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_ALPHATEST\n\n\tif ( diffuseColor.a < alphaTest ) discard;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_AOMAP\n\n\t// reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_AOMAP\n\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n\n#endif\n`;\n","export default /* glsl */`\nvec3 transformed = vec3( position );\n`;\n","export default /* glsl */`\nvec3 objectNormal = vec3( normal );\n\n#ifdef USE_TANGENT\n\n\tvec3 objectTangent = vec3( tangent.xyz );\n\n#endif\n`;\n","export default /* glsl */`\n\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\n\treturn RECIPROCAL_PI * diffuseColor;\n\n} // validated\n\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\n\t// Original approximation by Christophe Schlick '94\n\t// float fresnel = pow( 1.0 - dotVH, 5.0 );\n\n\t// Optimized variant (presented by Epic at SIGGRAPH '13)\n\t// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n\n} // validated\n\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\n\t// Original approximation by Christophe Schlick '94\n\t// float fresnel = pow( 1.0 - dotVH, 5.0 );\n\n\t// Optimized variant (presented by Epic at SIGGRAPH '13)\n\t// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n\n} // validated\n\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\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\n\n// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2\n// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\n\tfloat a2 = pow2( alpha );\n\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\n\treturn 0.5 / max( gv + gl, EPSILON );\n\n}\n\n// Microfacet Models for Refraction through Rough Surfaces - equation (33)\n// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html\n// alpha is \"roughness squared\" in Disney’s reparameterization\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\n\tfloat a2 = pow2( alpha );\n\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; // avoid alpha = 0 with dotNH = 1\n\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n\n}\n\n// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\n\n\tfloat alpha = pow2( roughness ); // UE4's roughness\n\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\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\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\n\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\n\tfloat D = D_GGX( alpha, dotNH );\n\n\treturn F * ( V * D );\n\n}\n\n#ifdef USE_IRIDESCENCE\n\n\tvec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) {\n\n\t\tfloat alpha = pow2( roughness ); // UE4's roughness\n\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\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\n\t\tvec3 F = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence );\n\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\n\t\tfloat D = D_GGX( alpha, dotNH );\n\n\t\treturn F * ( V * D );\n\n\t}\n\n#endif\n\n// Rect Area Light\n\n// Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\n// by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt\n// code: https://github.com/selfshadow/ltc_code/\n\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\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\n\tfloat dotNV = saturate( dot( N, V ) );\n\n\t// texture parameterized by sqrt( GGX alpha ) and sqrt( 1 - cos( theta ) )\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\n\treturn uv;\n\n}\n\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\n\t// Real-Time Area Lighting: a Journey from Research to Production (p.102)\n\t// An approximation of the form factor of a horizon-clipped rectangle.\n\n\tfloat l = length( f );\n\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n\n}\n\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\n\tfloat x = dot( v1, v2 );\n\n\tfloat y = abs( x );\n\n\t// rational polynomial approximation to theta / sin( theta ) / 2PI\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\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\n\treturn cross( v1, v2 ) * theta_sintheta;\n\n}\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\n\t// bail if point is on back side of plane of light\n\t// assumes ccw winding order of light vertices\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\n\t// construct orthonormal basis around N\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 ); // negated from paper; possibly due to a different handedness of world coordinate system\n\n\t// compute transform\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\n\t// transform rect\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\n\t// project rect onto sphere\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\n\t// calculate vector form factor\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\n\t// adjust for horizon clipping\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\n/*\n\t// alternate method of adjusting for horizon clipping (see referece)\n\t// refactoring required\n\tfloat len = length( vectorFormFactor );\n\tfloat z = vectorFormFactor.z / len;\n\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\n\t// tabulated horizon-clipped sphere, apparently...\n\tvec2 uv = vec2( z * 0.5 + 0.5, len );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\n\tfloat scale = texture2D( ltc_2, uv ).w;\n\n\tfloat result = len * scale;\n*/\n\n\treturn vec3( result );\n\n}\n\n// End Rect Area Light\n\n\nfloat G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\n\n\t// geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\n\treturn 0.25;\n\n}\n\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n\n}\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\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\n\tfloat G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\n\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\n\treturn F * ( G * D );\n\n} // validated\n\n#if defined( USE_SHEEN )\n\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\nfloat D_Charlie( float roughness, float dotNH ) {\n\n\tfloat alpha = pow2( roughness );\n\n\t// Estevez and Kulla 2017, \"Production Friendly Microfacet Sheen BRDF\"\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 ); // 2^(-14/2), so sin2h^2 > 0 in fp16\n\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n\n}\n\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\n\t// Neubelt and Pettineo 2013, \"Crafting a Next-gen Material Pipeline for The Order: 1886\"\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n\n}\n\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\n\treturn sheenColor * ( D * V );\n\n}\n\n#endif\n`;\n","export default /* glsl */`\n\n#ifdef USE_IRIDESCENCE\n\n\t// XYZ to linear-sRGB color space\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\n\t// Assume air interface for top\n\t// Note: We don't handle the case fresnel0 == 1\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\n\t}\n\n\t// Conversion FO/IOR\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\n\t}\n\n\t// ior is a value between 1.0 and 3.0. 1.0 is air interface\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\n\t}\n\n\t// Fresnel equations for dielectric/dielectric interfaces.\n\t// Ref: https://belcour.github.io/blog/research/2017/05/01/brdf-thin-film.html\n\t// Evaluation XYZ sensitivity curves in Fourier space\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\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\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\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\n\t}\n\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\n\t\tvec3 I;\n\n\t\t// Force iridescenceIOR -> outsideIOR when thinFilmThickness -> 0.0\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\t// Evaluate the cosTheta on the base layer (Snell law)\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\n\t\t// Handle TIR:\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\n\t\t\t return vec3( 1.0 );\n\n\t\t}\n\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\n\t\t// First interface\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat R21 = R12;\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\n\t\t// Second interface\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); // guard against 1.0\n\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\n\t\t// Phase shift\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\n\t\t// Compound terms\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\n\t\t// Reflectance term for m = 0 (DC term amplitude)\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\n\t\t// Reflectance term for m > 0 (pairs of diracs)\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\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\n\t\t}\n\n\t\t// Since out of gamut colors might be produced, negative color values are clamped to 0.\n\t\treturn max( I, vec3( 0.0 ) );\n\n\t}\n\n#endif\n\n`;\n","export default /* glsl */`\n#ifdef USE_BUMPMAP\n\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\n\t// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen\n\t// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf\n\n\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\n\n\tvec2 dHdxy_fwd() {\n\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\n\t\treturn vec2( dBx, dBy );\n\n\t}\n\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\n\t\tvec3 vSigmaX = dFdx( surf_pos.xyz );\n\t\tvec3 vSigmaY = dFdy( surf_pos.xyz );\n\t\tvec3 vN = surf_norm; // normalized\n\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\n\t}\n\n#endif\n`;\n","export default /* glsl */`\n#if NUM_CLIPPING_PLANES > 0\n\n\tvec4 plane;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\n\t\tbool clipped = true;\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t\tif ( clipped ) discard;\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#if NUM_CLIPPING_PLANES > 0\n\n\tvarying vec3 vClipPosition;\n\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n\n#endif\n`;\n","export default /* glsl */`\n#if NUM_CLIPPING_PLANES > 0\n\n\tvarying vec3 vClipPosition;\n\n#endif\n`;\n","export default /* glsl */`\n#if NUM_CLIPPING_PLANES > 0\n\n\tvClipPosition = - mvPosition.xyz;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_COLOR_ALPHA )\n\n\tdiffuseColor *= vColor;\n\n#elif defined( USE_COLOR )\n\n\tdiffuseColor.rgb *= vColor;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_COLOR_ALPHA )\n\n\tvarying vec4 vColor;\n\n#elif defined( USE_COLOR )\n\n\tvarying vec3 vColor;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_COLOR_ALPHA )\n\n\tvarying vec4 vColor;\n\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\n\tvarying vec3 vColor;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_COLOR_ALPHA )\n\n\tvColor = vec4( 1.0 );\n\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\n\tvColor = vec3( 1.0 );\n\n#endif\n\n#ifdef USE_COLOR\n\n\tvColor *= color;\n\n#endif\n\n#ifdef USE_INSTANCING_COLOR\n\n\tvColor.xyz *= instanceColor.xyz;\n\n#endif\n`;\n","export default /* glsl */`\n#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\n#ifndef saturate\n// may have defined saturate() already\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\n\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 ) ); }\n\n// expects values in the range of [0,1]x[0,1], returns values in the [0,1] range.\n// do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\nhighp float rand( const in vec2 uv ) {\n\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\n\treturn fract( sin( sn ) * c );\n\n}\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\n\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\n\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\n\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n}\n\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t// dir can be either a direction vector or a normal vector\n\t// upper-left 3x3 of matrix is assumed to be orthogonal\n\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n\n}\n\nmat3 transposeMat3( const in mat3 m ) {\n\n\tmat3 tmp;\n\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\n\treturn tmp;\n\n}\n\nfloat luminance( const in vec3 rgb ) {\n\n\t// assumes rgb is in linear color space with sRGB primaries and D65 white point\n\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\n\treturn dot( weights, rgb );\n\n}\n\nbool isPerspectiveMatrix( mat4 m ) {\n\n\treturn m[ 2 ][ 3 ] == - 1.0;\n\n}\n\nvec2 equirectUv( in vec3 dir ) {\n\n\t// dir is assumed to be unit length\n\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\n\treturn vec2( u, v );\n\n}\n`;\n","export default /* glsl */`\n#ifdef ENVMAP_TYPE_CUBE_UV\n\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\n\t// These shader functions convert between the UV coordinates of a single face of\n\t// a cubemap, the 0-5 integer index of a cube face, and the direction vector for\n\t// sampling a textureCube (not generally normalized ).\n\n\tfloat getFace( vec3 direction ) {\n\n\t\tvec3 absDirection = abs( direction );\n\n\t\tfloat face = - 1.0;\n\n\t\tif ( absDirection.x > absDirection.z ) {\n\n\t\t\tif ( absDirection.x > absDirection.y )\n\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\n\t\t\telse\n\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\n\t\t} else {\n\n\t\t\tif ( absDirection.z > absDirection.y )\n\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\n\t\t\telse\n\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\n\t\t}\n\n\t\treturn face;\n\n\t}\n\n\t// RH coordinate system; PMREM face-indexing convention\n\tvec2 getUV( vec3 direction, float face ) {\n\n\t\tvec2 uv;\n\n\t\tif ( face == 0.0 ) {\n\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x ); // pos x\n\n\t\t} else if ( face == 1.0 ) {\n\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y ); // pos y\n\n\t\t} else if ( face == 2.0 ) {\n\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z ); // pos z\n\n\t\t} else if ( face == 3.0 ) {\n\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x ); // neg x\n\n\t\t} else if ( face == 4.0 ) {\n\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y ); // neg y\n\n\t\t} else {\n\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z ); // neg z\n\n\t\t}\n\n\t\treturn 0.5 * ( uv + 1.0 );\n\n\t}\n\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\n\t\tfloat face = getFace( direction );\n\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\n\t\tfloat faceSize = exp2( mipInt );\n\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\n\t\tif ( face > 2.0 ) {\n\n\t\t\tuv.y += faceSize;\n\n\t\t\tface -= 3.0;\n\n\t\t}\n\n\t\tuv.x += face * faceSize;\n\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\n\t\t#ifdef texture2DGradEXT\n\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; // disable anisotropic filtering\n\n\t\t#else\n\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\n\t\t#endif\n\n\t}\n\n\t// These defines must match with PMREMGenerator\n\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_v0 0.339\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_v1 0.276\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_v4 0.046\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_v5 0.016\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_v6 0.0038\n\t#define cubeUV_m6 4.0\n\n\tfloat roughnessToMip( float roughness ) {\n\n\t\tfloat mip = 0.0;\n\n\t\tif ( roughness >= cubeUV_r1 ) {\n\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\n\t\t} else {\n\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness ); // 1.16 = 1.79^0.25\n\t\t}\n\n\t\treturn mip;\n\n\t}\n\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\n\t\tfloat mipF = fract( mip );\n\n\t\tfloat mipInt = floor( mip );\n\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\n\t\tif ( mipF == 0.0 ) {\n\n\t\t\treturn vec4( color0, 1.0 );\n\n\t\t} else {\n\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\n\t\t}\n\n\t}\n\n#endif\n`;\n","export default /* glsl */`\nvec3 transformedNormal = objectNormal;\n\n#ifdef USE_INSTANCING\n\n\t// this is in lieu of a per-instance normal-matrix\n\t// shear transforms in the instance matrix are not supported\n\n\tmat3 m = mat3( instanceMatrix );\n\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\n\ttransformedNormal = m * transformedNormal;\n\n#endif\n\ntransformedNormal = normalMatrix * transformedNormal;\n\n#ifdef FLIP_SIDED\n\n\ttransformedNormal = - transformedNormal;\n\n#endif\n\n#ifdef USE_TANGENT\n\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\n\t#ifdef FLIP_SIDED\n\n\t\ttransformedTangent = - transformedTangent;\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_DISPLACEMENTMAP\n\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_DISPLACEMENTMAP\n\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_EMISSIVEMAP\n\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_EMISSIVEMAP\n\n\tuniform sampler2D emissiveMap;\n\n#endif\n`;\n","export default /* glsl */`\ngl_FragColor = linearToOutputTexel( gl_FragColor );\n`;\n","export default /* glsl */`\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\n\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\n\n`;\n","export default /* glsl */`\n#ifdef USE_ENVMAP\n\n\t#ifdef ENV_WORLDPOS\n\n\t\tvec3 cameraToFrag;\n\n\t\tif ( isOrthographic ) {\n\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\n\t\t} else {\n\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\n\t\t}\n\n\t\t// Transforming Normal Vectors with the Inverse Transformation\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\n\t\t#else\n\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\n\t\t#endif\n\n\t#else\n\n\t\tvec3 reflectVec = vReflect;\n\n\t#endif\n\n\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n\t#else\n\n\t\tvec4 envColor = vec4( 0.0 );\n\n\t#endif\n\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_ENVMAP\n\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\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\n`;\n","export default /* glsl */`\n#ifdef USE_ENVMAP\n\n\tuniform float reflectivity;\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\n\t\t#define ENV_WORLDPOS\n\n\t#endif\n\n\t#ifdef ENV_WORLDPOS\n\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_ENVMAP\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\n\t\t#define ENV_WORLDPOS\n\n\t#endif\n\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\n\t#else\n\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_ENVMAP )\n\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\n\t\t#else\n\n\t\t\treturn vec3( 0.0 );\n\n\t\t#endif\n\n\t}\n\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\n\t\t\t// Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\n\t\t#else\n\n\t\t\treturn vec3( 0.0 );\n\n\t\t#endif\n\n\t}\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_ENVMAP\n\n\t#ifdef ENV_WORLDPOS\n\n\t\tvWorldPosition = worldPosition.xyz;\n\n\t#else\n\n\t\tvec3 cameraToVertex;\n\n\t\tif ( isOrthographic ) {\n\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\n\t\t} else {\n\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\n\t\t}\n\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\n\t\t#else\n\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\n\t\t#endif\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_FOG\n\n\tvFogDepth = - mvPosition.z;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_FOG\n\n\tvarying float vFogDepth;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_FOG\n\n\t#ifdef FOG_EXP2\n\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\n\t#else\n\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\n\t#endif\n\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_FOG\n\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\n\t#ifdef FOG_EXP2\n\n\t\tuniform float fogDensity;\n\n\t#else\n\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n\n#ifdef USE_GRADIENTMAP\n\n\tuniform sampler2D gradientMap;\n\n#endif\n\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\n\t// dotNL will be from -1.0 to 1.0\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\n\t#ifdef USE_GRADIENTMAP\n\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\n\t#else\n\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\n\t#endif\n\n}\n`;\n","export default /* glsl */`\n#ifdef USE_LIGHTMAP\n\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_LIGHTMAP\n\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n\n#endif\n`;\n","export default /* glsl */`\nLambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;\n`;\n","export default /* glsl */`\nvarying vec3 vViewPosition;\n\nstruct LambertMaterial {\n\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n\n};\n\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert\n\n#define Material_LightProbeLOD( material )\t(0)\n`;\n","export default /* glsl */`\nuniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\n\n// get the irradiance (radiance convolved with cosine lobe) at the point 'normal' on the unit sphere\n// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\n\t// normal is assumed to have unit length\n\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\n\t// band 0\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\n\t// band 1\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\n\t// band 2\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\n\treturn result;\n\n}\n\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\n\treturn irradiance;\n\n}\n\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\n\tvec3 irradiance = ambientLightColor;\n\n\treturn irradiance;\n\n}\n\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\n\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\n\t\t// based upon Frostbite 3 Moving to Physically-based Rendering\n\t\t// page 32, equation 26: E[window1]\n\t\t// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\n\t\tif ( cutoffDistance > 0.0 ) {\n\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\n\t\t}\n\n\t\treturn distanceFalloff;\n\n\t#else\n\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\n\t\t}\n\n\t\treturn 1.0;\n\n\t#endif\n\n}\n\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n\n}\n\n#if NUM_DIR_LIGHTS > 0\n\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\n\t}\n\n#endif\n\n\n#if NUM_POINT_LIGHTS > 0\n\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\n\t// light is an out parameter as having it as a return value caused compiler errors on some devices\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\n\t\tlight.direction = normalize( lVector );\n\n\t\tfloat lightDistance = length( lVector );\n\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\n\t}\n\n#endif\n\n\n#if NUM_SPOT_LIGHTS > 0\n\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\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\n\t// light is an out parameter as having it as a return value caused compiler errors on some devices\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\n\t\tlight.direction = normalize( lVector );\n\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\n\t\tif ( spotAttenuation > 0.0 ) {\n\n\t\t\tfloat lightDistance = length( lVector );\n\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\n\t\t} else {\n\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\n\t\t}\n\n\t}\n\n#endif\n\n\n#if NUM_RECT_AREA_LIGHTS > 0\n\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\n\t// Pre-computed values of LinearTransformedCosine approximation of BRDF\n\t// BRDF approximation Texture is 64x64\n\tuniform sampler2D ltc_1; // RGBA Float\n\tuniform sampler2D ltc_2; // RGBA Float\n\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n\n#endif\n\n\n#if NUM_HEMI_LIGHTS > 0\n\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\n\t\treturn irradiance;\n\n\t}\n\n#endif\n`;\n","export default /* glsl */`\nToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\n`;\n","export default /* glsl */`\nvarying vec3 vViewPosition;\n\nstruct ToonMaterial {\n\n\tvec3 diffuseColor;\n\n};\n\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n\n#define Material_LightProbeLOD( material )\t(0)\n`;\n","export default /* glsl */`\nBlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n`;\n","export default /* glsl */`\nvarying vec3 vViewPosition;\n\nstruct BlinnPhongMaterial {\n\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n\n};\n\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n\n}\n\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n\n#define Material_LightProbeLOD( material )\t(0)\n`;\n","export default /* glsl */`\nPhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\n\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\n\nmaterial.roughness = max( roughnessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.\nmaterial.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n\n#ifdef IOR\n\n\tmaterial.ior = ior;\n\n\t#ifdef SPECULAR\n\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\n\t\t#endif\n\n\t\t#ifdef USE_SPECULARCOLORMAP\n\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\n\n\t\t#endif\n\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\n\t#else\n\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\n\t#endif\n\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n\n#else\n\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n\n#endif\n\n#ifdef USE_CLEARCOAT\n\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\n\t#ifdef USE_CLEARCOATMAP\n\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\n\t#endif\n\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\n\t#endif\n\n\tmaterial.clearcoat = saturate( material.clearcoat ); // Burley clearcoat model\n\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n\n#endif\n\n#ifdef USE_IRIDESCENCE\n\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\n\t#ifdef USE_IRIDESCENCEMAP\n\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vUv ).r;\n\n\t#endif\n\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum;\n\n\t#else\n\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\n\t#endif\n\n#endif\n\n#ifdef USE_SHEEN\n\n\tmaterial.sheenColor = sheenColor;\n\n\t#ifdef USE_SHEENCOLORMAP\n\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\n\n\t#endif\n\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\n\t#ifdef USE_SHEENROUGHNESSMAP\n\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\nstruct PhysicalMaterial {\n\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\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\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\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\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\n};\n\n// temporary\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\n\n// This is a curve-fit approxmation to the \"Charlie sheen\" BRDF integrated over the hemisphere from \n// Estevez and Kulla 2017, \"Production Friendly Microfacet Sheen BRDF\". The analysis can be found\n// in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\n\tfloat r2 = roughness * roughness;\n\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\n\treturn saturate( DG * RECIPROCAL_PI );\n\n}\n\n// Analytical approximation of the DFG LUT, one half of the\n// split-sum approximation used in indirect specular lighting.\n// via 'environmentBRDF' from \"Physically Based Shading on Mobile\"\n// https://www.unrealengine.com/blog/physically-based-shading-on-mobile\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\n\tvec4 r = roughness * c0 + c1;\n\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\n\treturn fab;\n\n}\n\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\n\treturn specularColor * fab.x + specularF90 * fab.y;\n\n}\n\n// Fdez-Agüera's \"Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting\"\n// Approximates multiscattering in order to preserve energy.\n// http://www.jcgt.org/published/0008/01/03/\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\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\n\t#ifdef USE_IRIDESCENCE\n\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\n\t#else\n\n\t\tvec3 Fr = specularColor;\n\n\t#endif\n\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; // 1/21\n\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n\n}\n\n#if NUM_RECT_AREA_LIGHTS > 0\n\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight; // counterclockwise; light shines in local neg z direction\n\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\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\n\t\t// LTC Fresnel Approximation by Stephen Hill\n\t\t// http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\n\t}\n\n#endif\n\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\n\tvec3 irradiance = dotNL * directLight.color;\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\n\t#endif\n\n\t#ifdef USE_SHEEN\n\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\n\t#endif\n\n\t#ifdef USE_IRIDESCENCE\n\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness );\n\n\t#else\n\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\n\t#endif\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\n\t#endif\n\n\t#ifdef USE_SHEEN\n\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\n\t#endif\n\n\t// Both indirect specular and indirect diffuse light accumulate here\n\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\n\t#ifdef USE_IRIDESCENCE\n\n\t\tcomputeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\n\t#else\n\n\t\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\n\t#endif\n\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n\n}\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\n\n// ref: https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n\n}\n`;\n","export default /* glsl */`\n/**\n * This is a template that can be used to light a material, it uses pluggable\n * RenderEquations (RE)for specific lighting scenarios.\n *\n * Instructions for use:\n * - Ensure that both RE_Direct, RE_IndirectDiffuse and RE_IndirectSpecular are defined\n * - If you have defined an RE_IndirectSpecular, you need to also provide a Material_LightProbeLOD. <---- ???\n * - Create a material parameter that is to be passed as the third parameter to your lighting functions.\n *\n * TODO:\n * - Add area light support.\n * - Add sphere light support.\n * - Add diffuse light probe (irradiance cubemap) support.\n */\n\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef USE_CLEARCOAT\n\n\tgeometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\n#ifdef USE_IRIDESCENCE\n\n\tfloat dotNVi = saturate( dot( normal, geometry.viewDir ) );\n\n\tif ( material.iridescenceThickness == 0.0 ) {\n\n\t\tmaterial.iridescence = 0.0;\n\n\t} else {\n\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\n\t}\n\n\tif ( material.iridescence > 0.0 ) {\n\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\n\t\t// Iridescence F0 approximation\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\n\t}\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\n\t\t// spot lights are ordered [shadows with maps, shadows without maps, maps without shadows, none]\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\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\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( RE_IndirectDiffuse )\n\n\t#ifdef USE_LIGHTMAP\n\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\n\t\tirradiance += lightMapIrradiance;\n\n\t#endif\n\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\n\t#endif\n\n#endif\n\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( RE_IndirectDiffuse )\n\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\n\t// Doing a strict comparison with == 1.0 can cause noise artifacts\n\t// on some platforms. See issue #17623.\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_LOGDEPTHBUF\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\n\t#else\n\n\t\tuniform float logDepthBufFC;\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_LOGDEPTHBUF\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\n\t#else\n\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\n\t\t\tgl_Position.z *= gl_Position.w;\n\n\t\t}\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_MAP\n\n\tvec4 sampledDiffuseColor = texture2D( map, vUv );\n\n\t#ifdef DECODE_VIDEO_TEXTURE\n\n\t\t// inline sRGB decode (TODO: Remove this code when https://crbug.com/1256340 is solved)\n\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\n\t#endif\n\n\tdiffuseColor *= sampledDiffuseColor;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\n#endif\n\n#ifdef USE_MAP\n\n\tdiffuseColor *= texture2D( map, uv );\n\n#endif\n\n#ifdef USE_ALPHAMAP\n\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\n\tuniform mat3 uvTransform;\n\n#endif\n\n#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif\n\n#ifdef USE_ALPHAMAP\n\n\tuniform sampler2D alphaMap;\n\n#endif\n`;\n","export default /* glsl */`\nfloat metalnessFactor = metalness;\n\n#ifdef USE_METALNESSMAP\n\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\n\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tmetalnessFactor *= texelMetalness.b;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_METALNESSMAP\n\n\tuniform sampler2D metalnessMap;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\n\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\n\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)\n\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\n\tvColor *= morphTargetBaseInfluence;\n\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\n\t\t#if defined( USE_COLOR_ALPHA )\n\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\n\t\t#elif defined( USE_COLOR )\n\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\n\t\t#endif\n\n\t}\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_MORPHNORMALS\n\n\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\n\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)\n\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\n\tobjectNormal *= morphTargetBaseInfluence;\n\n\t#ifdef MORPHTARGETS_TEXTURE\n\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\n\t\t}\n\n\t#else\n\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_MORPHTARGETS\n\n\tuniform float morphTargetBaseInfluence;\n\n\t#ifdef MORPHTARGETS_TEXTURE\n\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\n\t\t}\n\n\t#else\n\n\t\t#ifndef USE_MORPHNORMALS\n\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\n\t\t#else\n\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\n\t\t#endif\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_MORPHTARGETS\n\n\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\n\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in position = sum((target - base) * influence)\n\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\n\ttransformed *= morphTargetBaseInfluence;\n\n\t#ifdef MORPHTARGETS_TEXTURE\n\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\n\t\t}\n\n\t#else\n\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\n\t\t#ifndef USE_MORPHNORMALS\n\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\n\t\t#endif\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\nfloat faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n\n#ifdef FLAT_SHADED\n\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n\n#else\n\n\tvec3 normal = normalize( vNormal );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tnormal = normal * faceDirection;\n\n\t#endif\n\n\t#ifdef USE_TANGENT\n\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\n\t\t#endif\n\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\n\t\t#endif\n\n\t#endif\n\n#endif\n\n// non perturbed normal for clearcoat among others\n\nvec3 geometryNormal = normal;\n\n`;\n","export default /* glsl */`\n\n#ifdef OBJECTSPACE_NORMALMAP\n\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; // overrides both flatShading and attribute normals\n\n\t#ifdef FLIP_SIDED\n\n\t\tnormal = - normal;\n\n\t#endif\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tnormal = normal * faceDirection;\n\n\t#endif\n\n\tnormal = normalize( normalMatrix * normal );\n\n#elif defined( TANGENTSPACE_NORMALMAP )\n\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\n\t#ifdef USE_TANGENT\n\n\t\tnormal = normalize( vTBN * mapN );\n\n\t#else\n\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\n\t#endif\n\n#elif defined( USE_BUMPMAP )\n\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n\n#endif\n`;\n","export default /* glsl */`\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n\t#ifdef USE_TANGENT\n\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n\t#ifdef USE_TANGENT\n\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifndef FLAT_SHADED // normal is computed with derivatives when FLAT_SHADED\n\n\tvNormal = normalize( transformedNormal );\n\n\t#ifdef USE_TANGENT\n\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_NORMALMAP\n\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\n#endif\n\n#ifdef OBJECTSPACE_NORMALMAP\n\n\tuniform mat3 normalMatrix;\n\n#endif\n\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\n\t// Normal Mapping Without Precomputed Tangents\n\t// http://www.thetenthplanet.de/archives/1180\n\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\n\t\tvec3 N = surf_norm; // normalized\n\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\n\t}\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_CLEARCOAT\n\n\tvec3 clearcoatNormal = geometryNormal;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_CLEARCOAT_NORMALMAP\n\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\n\t#ifdef USE_TANGENT\n\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\n\t#else\n\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\n\n#ifdef USE_CLEARCOATMAP\n\n\tuniform sampler2D clearcoatMap;\n\n#endif\n\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\n\tuniform sampler2D clearcoatRoughnessMap;\n\n#endif\n\n#ifdef USE_CLEARCOAT_NORMALMAP\n\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n\n#endif\n`;\n","export default /* glsl */`\n\n#ifdef USE_IRIDESCENCEMAP\n\n\tuniform sampler2D iridescenceMap;\n\n#endif\n\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\n\tuniform sampler2D iridescenceThicknessMap;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n\n// https://github.com/mrdoob/three.js/pull/22425\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha + 0.1;\n#endif\n\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\n`;\n","export default /* glsl */`\nvec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\n\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\n\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\n\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\n\nconst float ShiftRight8 = 1. / 256.;\n\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8; // tidy overflow\n\treturn r * PackUpscale;\n}\n\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\n\nvec2 packDepthToRG( in highp float v ) {\n\treturn packDepthToRGBA( v ).yx;\n}\n\nfloat unpackRGToDepth( const in highp vec2 v ) {\n\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\n}\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}\n\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\n\n// NOTE: viewZ/eyeZ is < 0 when in front of the camera per OpenGL conventions\n\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\n\n// NOTE: https://twitter.com/gonnavis/status/1377183786949959682\n\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n`;\n","export default /* glsl */`\n#ifdef PREMULTIPLIED_ALPHA\n\n\t// Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.\n\tgl_FragColor.rgb *= gl_FragColor.a;\n\n#endif\n`;\n","export default /* glsl */`\nvec4 mvPosition = vec4( transformed, 1.0 );\n\n#ifdef USE_INSTANCING\n\n\tmvPosition = instanceMatrix * mvPosition;\n\n#endif\n\nmvPosition = modelViewMatrix * mvPosition;\n\ngl_Position = projectionMatrix * mvPosition;\n`;\n","export default /* glsl */`\n#ifdef DITHERING\n\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef DITHERING\n\n\t// based on https://www.shadertoy.com/view/MslGR8\n\tvec3 dithering( vec3 color ) {\n\t\t//Calculate grid position\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\n\t\t//Shift the individual colors differently, thus making it even harder to see the dithering pattern\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\n\t\t//modify shift according to grid position.\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\n\t\t//shift the color by dither_shift\n\t\treturn color + dither_shift_RGB;\n\t}\n\n#endif\n`;\n","export default /* glsl */`\nfloat roughnessFactor = roughness;\n\n#ifdef USE_ROUGHNESSMAP\n\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\n\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\troughnessFactor *= texelRoughness.g;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_ROUGHNESSMAP\n\n\tuniform sampler2D roughnessMap;\n\n#endif\n`;\n","export default /* glsl */`\n#if NUM_SPOT_LIGHT_COORDS > 0\n\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n\n#endif\n\n#if NUM_SPOT_LIGHT_MAPS > 0\n\n uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n\n#endif\n\n#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\n\t\t// TODO (abelnation): create uniforms for area light shadows\n\n\t#endif\n\t*/\n\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\n\t}\n\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\n\t}\n\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\n\t\tfloat occlusion = 1.0;\n\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\n\t\tfloat hard_shadow = step( compare , distribution.x ); // Hard Shadow\n\n\t\tif (hard_shadow != 1.0 ) {\n\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 ); // Chebeyshevs inequality\n\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed\n\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\n\t\t}\n\t\treturn occlusion;\n\n\t}\n\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\n\t\tfloat shadow = 1.0;\n\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\n\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\n\t\t// if ( all( something, something ) ) using this instead\n\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\n\t\tbool frustumTest = all( frustumTestVec );\n\n\t\tif ( frustumTest ) {\n\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\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\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\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\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\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\n\t\t#else // no percentage-closer filtering:\n\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\n\t\t#endif\n\n\t\t}\n\n\t\treturn shadow;\n\n\t}\n\n\t// cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D\n\t// vector suitable for 2D texture mapping. This code uses the following layout for the\n\t// 2D texture:\n\t//\n\t// xzXZ\n\t// y Y\n\t//\n\t// Y - Positive y direction\n\t// y - Negative y direction\n\t// X - Positive x direction\n\t// x - Negative x direction\n\t// Z - Positive z direction\n\t// z - Negative z direction\n\t//\n\t// Source and test bed:\n\t// https://gist.github.com/tschw/da10c43c467ce8afd0c4\n\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\n\t\t// Number of texels to avoid at the edge of each square\n\n\t\tvec3 absV = abs( v );\n\n\t\t// Intersect unit cube\n\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\n\t\t// Apply scale to avoid seams\n\n\t\t// two texels less per square (one texel will do for NEAREST)\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\n\t\t// Unwrap\n\n\t\t// space: -1 ... 1 range for each square\n\t\t//\n\t\t// #X##\t\tdim := ( 4 , 2 )\n\t\t// # #\t\tcenter := ( 1 , 1 )\n\n\t\tvec2 planar = v.xy;\n\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\n\t\tif ( absV.z >= almostOne ) {\n\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\n\t\t} else if ( absV.x >= almostOne ) {\n\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\n\t\t} else if ( absV.y >= almostOne ) {\n\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\n\t\t}\n\n\t\t// Transform to UV space\n\n\t\t// scale := 0.5 / dim\n\t\t// translate := ( center + 0.5 ) / dim\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\n\t}\n\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\n\t\t// for point lights, the uniform @vShadowCoord is re-purposed to hold\n\t\t// the vector from the light to the world-space position of the fragment.\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\n\t\t// dp = normalized distance from light to fragment position\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp?\n\t\tdp += shadowBias;\n\n\t\t// bd3D = base direction 3D\n\t\tvec3 bd3D = normalize( lightToPosition );\n\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\n\t\t#else // no percentage-closer filtering\n\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\n\t\t#endif\n\n\t}\n\n#endif\n`;\n","export default /* glsl */`\n\n#if NUM_SPOT_LIGHT_COORDS > 0\n\n uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n\n#endif\n\n#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\n\t\t// TODO (abelnation): uniforms for area light shadows\n\n\t#endif\n\t*/\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_SHADOWMAP ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_COORDS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\n\t\t// Offsetting the position used for querying occlusion along the world normal can be used to reduce shadow acne.\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\n\t#endif\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_COORDS > 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\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\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\n\t\t// TODO (abelnation): update vAreaShadowCoord with area light info\n\n\t#endif\n\t*/\n\n#endif\n`;\n","export default /* glsl */`\nfloat getShadowMask() {\n\n\tfloat shadow = 1.0;\n\n\t#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\n\tDirectionalLightShadow directionalLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\n\tSpotLightShadow spotLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\n\tPointLightShadow pointLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\n\t\t// TODO (abelnation): update shadow for Area light\n\n\t#endif\n\t*/\n\n\t#endif\n\n\treturn shadow;\n\n}\n`;\n","export default /* glsl */`\n#ifdef USE_SKINNING\n\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\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_SKINNING\n\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\n\tmat4 getBoneMatrix( const in float i ) {\n\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\n\t\ty = dy * ( y + 0.5 );\n\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\n\t\treturn bone;\n\n\t}\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_SKINNING\n\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\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\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_SKINNING\n\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\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\n\t#ifdef USE_TANGENT\n\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\n\t#endif\n\n#endif\n`;\n","export default /* glsl */`\nfloat specularStrength;\n\n#ifdef USE_SPECULARMAP\n\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n\n#else\n\n\tspecularStrength = 1.0;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_SPECULARMAP\n\n\tuniform sampler2D specularMap;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( TONE_MAPPING )\n\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n\n#endif\n`;\n","export default /* glsl */`\n#ifndef saturate\n// may have defined saturate() already\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n\nuniform float toneMappingExposure;\n\n// exposure only\nvec3 LinearToneMapping( vec3 color ) {\n\n\treturn toneMappingExposure * color;\n\n}\n\n// source: https://www.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf\nvec3 ReinhardToneMapping( vec3 color ) {\n\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n\n}\n\n// source: http://filmicworlds.com/blog/filmic-tonemapping-operators/\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\n\t// optimized filmic operator by Jim Hejl and Richard Burgess-Dawson\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\n}\n\n// source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs\nvec3 RRTAndODTFit( vec3 v ) {\n\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\n}\n\n// this implementation of ACES is modified to accommodate a brighter viewing environment.\n// the scale factor of 1/0.6 is subjective. see discussion in #19621.\n\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\n\t// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ), // transposed from source\n\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\n\t// ODT_SAT => XYZ => D60_2_D65 => sRGB\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ), // transposed from source\n\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\n\tcolor *= toneMappingExposure / 0.6;\n\n\tcolor = ACESInputMat * color;\n\n\t// Apply RRT and ODT\n\tcolor = RRTAndODTFit( color );\n\n\tcolor = ACESOutputMat * color;\n\n\t// Clamp to [0, 1]\n\treturn saturate( color );\n\n}\n\nvec3 CustomToneMapping( vec3 color ) { return color; }\n`;\n","export default /* glsl */`\n#ifdef USE_TRANSMISSION\n\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\n\t#ifdef USE_TRANSMISSIONMAP\n\n\t\tmaterial.transmission *= texture2D( transmissionMap, vUv ).r;\n\n\t#endif\n\n\t#ifdef USE_THICKNESSMAP\n\n\t\tmaterial.thickness *= texture2D( thicknessMap, vUv ).g;\n\n\t#endif\n\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission );\n\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_TRANSMISSION\n\n\t// Transmission code is based on glTF-Sampler-Viewer\n\t// https://github.com/KhronosGroup/glTF-Sample-Viewer\n\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\n\t#ifdef USE_TRANSMISSIONMAP\n\n\t\tuniform sampler2D transmissionMap;\n\n\t#endif\n\n\t#ifdef USE_THICKNESSMAP\n\n\t\tuniform sampler2D thicknessMap;\n\n\t#endif\n\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\n\tvarying vec3 vWorldPosition;\n\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\n\t\t// Direction of refracted light.\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\n\t\t// Compute rotation-independant scaling of the model matrix.\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\n\t\t// The thickness is specified in local space.\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\n\t}\n\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\n\t\t// Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and\n\t\t// an IOR of 1.5 results in the default amount of microfacet refraction.\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\n\t}\n\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\n\t\t#ifdef texture2DLodEXT\n\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\n\t\t#else\n\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\n\t\t#endif\n\n\t}\n\n\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\n\t\tif ( isinf( attenuationDistance ) ) {\n\n\t\t\t// Attenuation distance is +∞, i.e. the transmitted color is not attenuated at all.\n\t\t\treturn radiance;\n\n\t\t} else {\n\n\t\t\t// Compute light attenuation using Beer's law.\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); // Beer's law\n\t\t\treturn transmittance * radiance;\n\n\t\t}\n\n\t}\n\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 ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\n\t\t// Project refracted vector on the framebuffer, while mapping to normalized device coordinates.\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\n\t\t// Sample framebuffer to get pixel the refracted ray hits.\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\n\t\t// Get the specular component.\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\n\t}\n#endif\n`;\n","export default /* glsl */`\n#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\n\tvarying vec2 vUv;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_UV\n\n\t#ifdef UVS_VERTEX_ONLY\n\n\t\tvec2 vUv;\n\n\t#else\n\n\t\tvarying vec2 vUv;\n\n\t#endif\n\n\tuniform mat3 uvTransform;\n\n#endif\n`;\n","export default /* glsl */`\n#ifdef USE_UV\n\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n\tvarying vec2 vUv2;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\n\tuniform mat3 uv2Transform;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n\n#endif\n`;\n","export default /* glsl */`\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\n\t#ifdef USE_INSTANCING\n\n\t\tworldPosition = instanceMatrix * worldPosition;\n\n\t#endif\n\n\tworldPosition = modelMatrix * worldPosition;\n\n#endif\n`;\n","export const vertex = /* glsl */`\nvarying vec2 vUv;\nuniform mat3 uvTransform;\n\nvoid main() {\n\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform sampler2D t2D;\n\nvarying vec2 vUv;\n\nvoid main() {\n\n\tgl_FragColor = texture2D( t2D, vUv );\n\n\t#ifdef DECODE_VIDEO_TEXTURE\n\n\t\t// inline sRGB decode (TODO: Remove this code when https://crbug.com/1256340 is solved)\n\n\t\tgl_FragColor = vec4( mix( pow( gl_FragColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), gl_FragColor.rgb * 0.0773993808, vec3( lessThanEqual( gl_FragColor.rgb, vec3( 0.04045 ) ) ) ), gl_FragColor.w );\n\n\t#endif\n\n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t#include \n\t#include \n\n\tgl_Position.z = gl_Position.w; // set z to camera.far\n\n}\n`;\n\nexport const fragment = /* glsl */`\n\n#ifdef ENVMAP_TYPE_CUBE\n\n\tuniform samplerCube envMap;\n\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\n\tuniform sampler2D envMap;\n\n#endif\n\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\n\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\n\n\t#else\n\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t#endif\n\n\tgl_FragColor = texColor;\n\n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t#include \n\t#include \n\n\tgl_Position.z = gl_Position.w; // set z to camera.far\n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\n\nvarying vec3 vWorldDirection;\n\nvoid main() {\n\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include \n\n\t#include \n\n\t#ifdef USE_DISPLACEMENTMAP\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvHighPrecisionZW = gl_Position.zw;\n\n}\n`;\n\nexport const fragment = /* glsl */`\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\n\t#include \n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n`;\n","export const vertex = /* glsl */`\n#define DISTANCE\n\nvarying vec3 vWorldPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\t#include \n\n\t#ifdef USE_DISPLACEMENTMAP\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvWorldPosition = worldPosition.xyz;\n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define DISTANCE\n\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main () {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#include \n\t#include \n\t#include \n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n`;\n","export const vertex = /* glsl */`\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform sampler2D tEquirect;\n\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvec3 direction = normalize( vWorldDirection );\n\n\tvec2 sampleUV = equirectUv( direction );\n\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\nuniform float scale;\nattribute float lineDistance;\n\nvarying float vLineDistance;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\tvLineDistance = scale * lineDistance;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform vec3 diffuse;\nuniform float opacity;\n\nuniform float dashSize;\nuniform float totalSize;\n\nvarying float vLineDistance;\n\n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\n\t\tdiscard;\n\n\t}\n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\n\toutgoingLight = diffuseColor.rgb; // simple shader\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform vec3 diffuse;\nuniform float opacity;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\n\t// accumulation (baked indirect lighting only)\n\t#ifdef USE_LIGHTMAP\n\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\n\t#else\n\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\n\t#endif\n\n\t// modulation\n\t#include \n\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#define LAMBERT\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define LAMBERT\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#define MATCAP\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define MATCAP\n\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\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; // 0.495 to remove artifacts caused by undersized matcap disks\n\n\t#ifdef USE_MATCAP\n\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\n\t#else\n\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); // default if matcap is missing\n\n\t#endif\n\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#define NORMAL\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvViewPosition = - mvPosition.xyz;\n\n#endif\n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define NORMAL\n\nuniform float opacity;\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\n\t#ifdef OPAQUE\n\n\t\tgl_FragColor.a = 1.0;\n\n\t#endif\n\n}\n`;\n","export const vertex = /* glsl */`\n#define PHONG\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define PHONG\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#define STANDARD\n\nvarying vec3 vViewPosition;\n\n#ifdef USE_TRANSMISSION\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\n#ifdef USE_TRANSMISSION\n\n\tvWorldPosition = worldPosition.xyz;\n\n#endif\n}\n`;\n\nexport const fragment = /* glsl */`\n#define STANDARD\n\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n\n#ifdef IOR\n\tuniform float ior;\n#endif\n\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\n\t#include \n\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\n\t#ifdef USE_SHEEN\n\n\t\t// Sheen energy compensation approximation calculation can be found at the end of\n\t\t// https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\n\t#endif\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#define TOON\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define TOON\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\nuniform float size;\nuniform float scale;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tgl_PointSize = size;\n\n\t#ifdef USE_SIZEATTENUATION\n\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform vec3 diffuse;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\toutgoingLight = diffuseColor.rgb;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform vec3 color;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\nuniform float rotation;\nuniform vec2 center;\n\n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\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\n\t#ifndef USE_SIZEATTENUATION\n\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\n\t#endif\n\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\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\n\tmvPosition.xy += rotatedPosition;\n\n\tgl_Position = projectionMatrix * mvPosition;\n\n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform vec3 diffuse;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\toutgoingLight = diffuseColor.rgb;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","import { WebGLUniforms } from './WebGLUniforms.js';\nimport { WebGLShader } from './WebGLShader.js';\nimport { ShaderChunk } from '../shaders/ShaderChunk.js';\nimport { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, sRGBEncoding, LinearEncoding, GLSL3 } from '../../constants.js';\n\nlet programIdCount = 0;\n\nfunction handleSource( string, errorLine ) {\n\n\tconst lines = string.split( '\\n' );\n\tconst lines2 = [];\n\n\tconst from = Math.max( errorLine - 6, 0 );\n\tconst to = Math.min( errorLine + 6, lines.length );\n\n\tfor ( let i = from; i < to; i ++ ) {\n\n\t\tconst line = i + 1;\n\t\tlines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );\n\n\t}\n\n\treturn lines2.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );\n\tconst errors = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && errors === '' ) return '';\n\n\tconst errorMatches = /ERROR: 0:(\\d+)/.exec( errors );\n\tif ( errorMatches ) {\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tconst errorLine = parseInt( errorMatches[ 1 ] );\n\t\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + handleSource( gl.getShaderSource( shader ), errorLine );\n\n\t} else {\n\n\t\treturn errors;\n\n\t}\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === gl.FLOAT_MAT2 ) locationSize = 2;\n\t\tif ( info.type === gl.FLOAT_MAT3 ) locationSize = 3;\n\t\tif ( info.type === gl.FLOAT_MAT4 ) locationSize = 4;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\tconst numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst unrollLoopPattern = /#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;\n\nfunction unrollLoops( string ) {\n\n\treturn string.replace( unrollLoopPattern, loopReplacer );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = 'precision ' + parameters.precision + ' float;\\nprecision ' + parameters.precision + ' int;';\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction generateCubeUVSize( parameters ) {\n\n\tconst imageHeight = parameters.envMapCubeUVHeight;\n\n\tif ( imageHeight === null ) return null;\n\n\tconst maxMip = Math.log2( imageHeight ) - 2;\n\n\tconst texelHeight = 1.0 / imageHeight;\n\n\tconst texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );\n\n\treturn { texelWidth, texelHeight, maxMip };\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// console.log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\tconst envMapCubeUVSize = generateCubeUVSize( parameters );\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphColors && parameters.isWebGL2 ) ? '#define USE_MORPHCOLORS' : '',\n\t\t\t( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE' : '',\n\t\t\t( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',\n\t\t\t( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescence ? '#define USE_IRIDESCENCE' : '',\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.opaque ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\t'precision mediump sampler2DArray;',\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error(\n\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\\n\\n' +\n\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\tfragmentErrors\n\t\t\t);\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nexport { WebGLProgram };\n","let _id = 0;\n\nclass WebGLShaderCache {\n\n\tconstructor() {\n\n\t\tthis.shaderCache = new Map();\n\t\tthis.materialCache = new Map();\n\n\t}\n\n\tupdate( material ) {\n\n\t\tconst vertexShader = material.vertexShader;\n\t\tconst fragmentShader = material.fragmentShader;\n\n\t\tconst vertexShaderStage = this._getShaderStage( vertexShader );\n\t\tconst fragmentShaderStage = this._getShaderStage( fragmentShader );\n\n\t\tconst materialShaders = this._getShaderCacheForMaterial( material );\n\n\t\tif ( materialShaders.has( vertexShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( vertexShaderStage );\n\t\t\tvertexShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\tif ( materialShaders.has( fragmentShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( fragmentShaderStage );\n\t\t\tfragmentShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( material ) {\n\n\t\tconst materialShaders = this.materialCache.get( material );\n\n\t\tfor ( const shaderStage of materialShaders ) {\n\n\t\t\tshaderStage.usedTimes --;\n\n\t\t\tif ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code );\n\n\t\t}\n\n\t\tthis.materialCache.delete( material );\n\n\t\treturn this;\n\n\t}\n\n\tgetVertexShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.vertexShader ).id;\n\n\t}\n\n\tgetFragmentShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.fragmentShader ).id;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shaderCache.clear();\n\t\tthis.materialCache.clear();\n\n\t}\n\n\t_getShaderCacheForMaterial( material ) {\n\n\t\tconst cache = this.materialCache;\n\t\tlet set = cache.get( material );\n\n\t\tif ( set === undefined ) {\n\n\t\t\tset = new Set();\n\t\t\tcache.set( material, set );\n\n\t\t}\n\n\t\treturn set;\n\n\t}\n\n\t_getShaderStage( code ) {\n\n\t\tconst cache = this.shaderCache;\n\t\tlet stage = cache.get( code );\n\n\t\tif ( stage === undefined ) {\n\n\t\t\tstage = new WebGLShaderStage( code );\n\t\t\tcache.set( code, stage );\n\n\t\t}\n\n\t\treturn stage;\n\n\t}\n\n}\n\nclass WebGLShaderStage {\n\n\tconstructor( code ) {\n\n\t\tthis.id = _id ++;\n\n\t\tthis.code = code;\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\nexport { WebGLShaderCache };\n","import { Color } from '../../math/Color.js';\nimport { Vector2 } from '../../math/Vector2.js';\nimport { Matrix3 } from '../../math/Matrix3.js';\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tuv2Transform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // physical\n\t\trefractionRatio: { value: 0.98 }, // basic, lambert, phong\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotLightMap: { value: [] },\n\t\tspotShadowMap: { value: [] },\n\t\tspotLightMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t}\n\n};\n\nexport { UniformsLib };\n","import { ShaderChunk } from './ShaderChunk.js';\nimport { mergeUniforms } from './UniformsUtils.js';\nimport { Vector2 } from '../../math/Vector2.js';\nimport { Vector3 } from '../../math/Vector3.js';\nimport { UniformsLib } from './UniformsLib.js';\nimport { Color } from '../../math/Color.js';\nimport { Matrix3 } from '../../math/Matrix3.js';\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: /*@__PURE__*/ new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\n\tbackgroundCube: {\n\n\t\tuniforms: {\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\tbackgroundBlurriness: { value: 0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.backgroundCube_vert,\n\t\tfragmentShader: ShaderChunk.backgroundCube_frag\n\n\t},\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: /*@__PURE__*/ new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: /*@__PURE__*/ new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tiridescence: { value: 0 },\n\t\t\tiridescenceMap: { value: null },\n\t\t\tiridescenceIOR: { value: 1.3 },\n\t\t\tiridescenceThicknessMinimum: { value: 100 },\n\t\t\tiridescenceThicknessMaximum: { value: 400 },\n\t\t\tiridescenceThicknessMap: { value: null },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenRoughness: { value: 1 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tspecularIntensity: { value: 1 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\n\nexport { ShaderLib };\n","import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, LinearEncoding, sRGBEncoding, NormalBlending } from '../../constants.js';\nimport { Layers } from '../../core/Layers.js';\nimport { WebGLProgram } from './WebGLProgram.js';\nimport { WebGLShaderCache } from './WebGLShaderCache.js';\nimport { ShaderLib } from '../shaders/ShaderLib.js';\nimport { UniformsUtils } from '../shaders/UniformsUtils.js';\n\nfunction WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst _programLayers = new Layers();\n\tconst _customShaders = new WebGLShaderCache();\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst vertexTextures = capabilities.vertexTextures;\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst geometry = object.geometry;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet morphTextureStride = 0;\n\n\t\tif ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;\n\t\tif ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;\n\t\tif ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;\n\n\t\t//\n\n\t\tlet vertexShader, fragmentShader;\n\t\tlet customVertexShaderID, customFragmentShaderID;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t\t_customShaders.update( material );\n\n\t\t\tcustomVertexShaderID = _customShaders.getVertexShaderID( material );\n\t\t\tcustomFragmentShaderID = _customShaders.getFragmentShaderID( material );\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst useAlphaTest = material.alphaTest > 0;\n\t\tconst useClearcoat = material.clearcoat > 0;\n\t\tconst useIridescence = material.iridescence > 0;\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tcustomVertexShaderID: customVertexShaderID,\n\t\t\tcustomFragmentShaderID: customFragmentShaderID,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget === null ) ? renderer.outputEncoding : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.encoding : LinearEncoding ),\n\t\t\tmap: !! material.map,\n\t\t\tmatcap: !! material.matcap,\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapCubeUVHeight: envMapCubeUVHeight,\n\t\t\tlightMap: !! material.lightMap,\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\n\t\t\tdecodeVideoTexture: !! material.map && ( material.map.isVideoTexture === true ) && ( material.map.encoding === sRGBEncoding ),\n\n\t\t\tclearcoat: useClearcoat,\n\t\t\tclearcoatMap: useClearcoat && !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: useClearcoat && !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: useClearcoat && !! material.clearcoatNormalMap,\n\n\t\t\tiridescence: useIridescence,\n\t\t\tiridescenceMap: useIridescence && !! material.iridescenceMap,\n\t\t\tiridescenceThicknessMap: useIridescence && !! material.iridescenceThicknessMap,\n\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\tspecularIntensityMap: !! material.specularIntensityMap,\n\t\t\tspecularColorMap: !! material.specularColorMap,\n\n\t\t\topaque: material.transparent === false && material.blending === NormalBlending,\n\n\t\t\talphaMap: !! material.alphaMap,\n\t\t\talphaTest: useAlphaTest,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tsheen: material.sheen > 0,\n\t\t\tsheenColorMap: !! material.sheenColorMap,\n\t\t\tsheenRoughnessMap: !! material.sheenRoughnessMap,\n\n\t\t\ttransmission: material.transmission > 0,\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\t\t\tthicknessMap: !! material.thicknessMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( !! material.normalMap && !! geometry.attributes.tangent ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || !! material.sheenRoughnessMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || material.sheen > 0 || !! material.sheenColorMap || !! material.sheenRoughnessMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog === true,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: !! material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true,\n\n\t\t\tmorphTargets: geometry.morphAttributes.position !== undefined,\n\t\t\tmorphNormals: geometry.morphAttributes.normal !== undefined,\n\t\t\tmorphColors: geometry.morphAttributes.color !== undefined,\n\t\t\tmorphTargetsCount: morphTargetsCount,\n\t\t\tmorphTextureStride: morphTextureStride,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumSpotLightMaps: lights.spotLightMap.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\t\t\tnumSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tuseDepthPacking: !! material.depthPacking,\n\t\t\tdepthPacking: material.depthPacking || 0,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.customVertexShaderID );\n\t\t\tarray.push( parameters.customFragmentShaderID );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tgetProgramCacheKeyParameters( array, parameters );\n\t\t\tgetProgramCacheKeyBooleans( array, parameters );\n\t\t\tarray.push( renderer.outputEncoding );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getProgramCacheKeyParameters( array, parameters ) {\n\n\t\tarray.push( parameters.precision );\n\t\tarray.push( parameters.outputEncoding );\n\t\tarray.push( parameters.envMapMode );\n\t\tarray.push( parameters.envMapCubeUVHeight );\n\t\tarray.push( parameters.combine );\n\t\tarray.push( parameters.vertexUvs );\n\t\tarray.push( parameters.fogExp2 );\n\t\tarray.push( parameters.sizeAttenuation );\n\t\tarray.push( parameters.morphTargetsCount );\n\t\tarray.push( parameters.morphAttributeCount );\n\t\tarray.push( parameters.numDirLights );\n\t\tarray.push( parameters.numPointLights );\n\t\tarray.push( parameters.numSpotLights );\n\t\tarray.push( parameters.numSpotLightMaps );\n\t\tarray.push( parameters.numHemiLights );\n\t\tarray.push( parameters.numRectAreaLights );\n\t\tarray.push( parameters.numDirLightShadows );\n\t\tarray.push( parameters.numPointLightShadows );\n\t\tarray.push( parameters.numSpotLightShadows );\n\t\tarray.push( parameters.numSpotLightShadowsWithMaps );\n\t\tarray.push( parameters.shadowMapType );\n\t\tarray.push( parameters.toneMapping );\n\t\tarray.push( parameters.numClippingPlanes );\n\t\tarray.push( parameters.numClipIntersection );\n\t\tarray.push( parameters.depthPacking );\n\n\t}\n\n\tfunction getProgramCacheKeyBooleans( array, parameters ) {\n\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.isWebGL2 )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.supportsVertexTextures )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.instancing )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.instancingColor )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.map )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.matcap )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.envMap )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.lightMap )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.aoMap )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.emissiveMap )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.bumpMap )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.normalMap )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.objectSpaceNormalMap )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.tangentSpaceNormalMap )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.clearcoat )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.clearcoatMap )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.clearcoatRoughnessMap )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.clearcoatNormalMap )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.iridescence )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.iridescenceMap )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.iridescenceThicknessMap )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.displacementMap )\n\t\t\t_programLayers.enable( 21 );\n\t\tif ( parameters.specularMap )\n\t\t\t_programLayers.enable( 22 );\n\t\tif ( parameters.roughnessMap )\n\t\t\t_programLayers.enable( 23 );\n\t\tif ( parameters.metalnessMap )\n\t\t\t_programLayers.enable( 24 );\n\t\tif ( parameters.gradientMap )\n\t\t\t_programLayers.enable( 25 );\n\t\tif ( parameters.alphaMap )\n\t\t\t_programLayers.enable( 26 );\n\t\tif ( parameters.alphaTest )\n\t\t\t_programLayers.enable( 27 );\n\t\tif ( parameters.vertexColors )\n\t\t\t_programLayers.enable( 28 );\n\t\tif ( parameters.vertexAlphas )\n\t\t\t_programLayers.enable( 29 );\n\t\tif ( parameters.vertexUvs )\n\t\t\t_programLayers.enable( 30 );\n\t\tif ( parameters.vertexTangents )\n\t\t\t_programLayers.enable( 31 );\n\t\tif ( parameters.uvsVertexOnly )\n\t\t\t_programLayers.enable( 32 );\n\n\t\tarray.push( _programLayers.mask );\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.fog )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.useFog )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.flatShading )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.logarithmicDepthBuffer )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.skinning )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.morphTargets )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.morphNormals )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.morphColors )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.premultipliedAlpha )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.shadowMapEnabled )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.physicallyCorrectLights )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.doubleSided )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.flipSided )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.useDepthPacking )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.dithering )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.specularIntensityMap )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.specularColorMap )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.transmission )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.transmissionMap )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.thicknessMap )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.sheen )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.sheenColorMap )\n\t\t\t_programLayers.enable( 21 );\n\t\tif ( parameters.sheenRoughnessMap )\n\t\t\t_programLayers.enable( 22 );\n\t\tif ( parameters.decodeVideoTexture )\n\t\t\t_programLayers.enable( 23 );\n\t\tif ( parameters.opaque )\n\t\t\t_programLayers.enable( 24 );\n\n\t\tarray.push( _programLayers.mask );\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\tfunction releaseShaderCache( material ) {\n\n\t\t_customShaders.remove( material );\n\n\t}\n\n\tfunction dispose() {\n\n\t\t_customShaders.dispose();\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\treleaseShaderCache: releaseShaderCache,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs,\n\t\tdispose: dispose\n\t};\n\n}\n\n\nexport { WebGLPrograms };\n","function WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\n\nexport { WebGLProperties };\n","function painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList() {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tconst listArray = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( listArray === undefined ) {\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= listArray.length ) {\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlistArray.push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = listArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n\nexport { WebGLRenderLists, WebGLRenderList };\n","import { Material } from './Material.js';\nimport { BasicDepthPacking } from '../constants.js';\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDepthMaterial = true;\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MeshDepthMaterial };\n","import { Material } from './Material.js';\nimport { Vector3 } from '../math/Vector3.js';\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDistanceMaterial = true;\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.referencePosition.copy( source.referencePosition );\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MeshDistanceMaterial };\n","import { FrontSide, BackSide, DoubleSide, NearestFilter, PCFShadowMap, VSMShadowMap, RGBADepthPacking, NoBlending } from '../../constants.js';\nimport { WebGLRenderTarget } from '../WebGLRenderTarget.js';\nimport { MeshDepthMaterial } from '../../materials/MeshDepthMaterial.js';\nimport { MeshDistanceMaterial } from '../../materials/MeshDistanceMaterial.js';\nimport { ShaderMaterial } from '../../materials/ShaderMaterial.js';\nimport { BufferAttribute } from '../../core/BufferAttribute.js';\nimport { BufferGeometry } from '../../core/BufferGeometry.js';\nimport { Mesh } from '../../objects/Mesh.js';\nimport { Vector4 } from '../../math/Vector4.js';\nimport { Vector2 } from '../../math/Vector2.js';\nimport { Frustum } from '../../math/Frustum.js';\n\nimport * as vsm from '../shaders/ShaderLib/vsm.glsl.js';\n\nfunction WebGLShadowMap( _renderer, _objects, _capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = _capabilities.maxTextureSize;\n\n\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\t\tdefines: {\n\t\t\tVSM_SAMPLES: 8\n\t\t},\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vsm.vertex,\n\t\tfragmentShader: vsm.fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\tif ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {\n\n\t\t\tshadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;\n\t\t\tshadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;\n\n\t\t\tshadowMaterialVertical.needsUpdate = true;\n\t\t\tshadowMaterialHorizontal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( shadow.mapPass === null ) {\n\n\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );\n\n\t\t}\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t}\n\n\t\tif ( ( _renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||\n\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t( material.alphaMap && material.alphaTest > 0 ) ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = material.alphaTest;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, material, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\n\nexport { WebGLShadowMap };\n","export const vertex = /* glsl */`\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n\n#include \n\nvoid main() {\n\n\tconst float samples = float( VSM_SAMPLES );\n\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\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\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\n\t\t#ifdef HORIZONTAL_PASS\n\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\n\t\t#else\n\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\n\t\t#endif\n\n\t}\n\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n\n}\n`;\n","import { NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessEqualDepth, LessDepth, AlwaysDepth, NeverDepth, CullFaceFront, CullFaceBack, CullFaceNone, DoubleSide, BackSide, CustomBlending, MultiplyBlending, SubtractiveBlending, AdditiveBlending, NoBlending, NormalBlending, AddEquation, SubtractEquation, ReverseSubtractEquation, MinEquation, MaxEquation, ZeroFactor, OneFactor, SrcColorFactor, SrcAlphaFactor, SrcAlphaSaturateFactor, DstColorFactor, DstAlphaFactor, OneMinusSrcColorFactor, OneMinusSrcAlphaFactor, OneMinusDstColorFactor, OneMinusDstAlphaFactor } from '../../constants.js';\nimport { Vector4 } from '../../math/Vector4.js';\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tconst uboBindings = new WeakMap();\n\tconst uboProgamMap = new WeakMap();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentBoundFramebuffers = {};\n\tlet currentDrawbuffers = new WeakMap();\n\tlet defaultDrawbuffers = [];\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( gl.SCISSOR_BOX );\n\tconst viewportParam = gl.getParameter( gl.VIEWPORT );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER\n\n\t\t\t\tif ( target === gl.DRAW_FRAMEBUFFER ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t\tif ( target === gl.FRAMEBUFFER ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction drawBuffers( renderTarget, framebuffer ) {\n\n\t\tlet drawBuffers = defaultDrawbuffers;\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tdrawBuffers = currentDrawbuffers.get( framebuffer );\n\n\t\t\tif ( drawBuffers === undefined ) {\n\n\t\t\t\tdrawBuffers = [];\n\t\t\t\tcurrentDrawbuffers.set( framebuffer, drawBuffers );\n\n\t\t\t}\n\n\t\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\tif ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {\n\n\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tdrawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdrawBuffers.length = textures.length;\n\n\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {\n\n\t\t\t\t\tdrawBuffers[ 0 ] = gl.COLOR_ATTACHMENT0;\n\n\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( drawBuffers[ 0 ] !== gl.BACK ) {\n\n\t\t\t\tdrawBuffers[ 0 ] = gl.BACK;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgl.drawBuffers( drawBuffers );\n\n\t\t\t} else {\n\n\t\t\t\textensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( drawBuffers );\n\n\t\t\t}\n\n\t\t}\n\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: gl.FUNC_ADD,\n\t\t[ SubtractEquation ]: gl.FUNC_SUBTRACT,\n\t\t[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = gl.MIN;\n\t\tequationToGL[ MaxEquation ] = gl.MAX;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: gl.ZERO,\n\t\t[ OneFactor ]: gl.ONE,\n\t\t[ SrcColorFactor ]: gl.SRC_COLOR,\n\t\t[ SrcAlphaFactor ]: gl.SRC_ALPHA,\n\t\t[ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE,\n\t\t[ DstColorFactor ]: gl.DST_COLOR,\n\t\t[ DstAlphaFactor ]: gl.DST_ALPHA,\n\t\t[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,\n\t\t[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,\n\t\t[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,\n\t\t[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( gl.BLEND );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( gl.BLEND );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( gl.SAMPLE_ALPHA_TO_COVERAGE )\n\t\t\t: disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture, webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\twebglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\t\t} else {\n\n\t\t\t\twebglSlot = currentTextureSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ webglSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ webglSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\tfunction updateUBOMapping( uniformsGroup, program ) {\n\n\t\tlet mapping = uboProgamMap.get( program );\n\n\t\tif ( mapping === undefined ) {\n\n\t\t\tmapping = new WeakMap();\n\n\t\t\tuboProgamMap.set( program, mapping );\n\n\t\t}\n\n\t\tlet blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( blockIndex === undefined ) {\n\n\t\t\tblockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );\n\n\t\t\tmapping.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\tfunction uniformBlockBinding( uniformsGroup, program ) {\n\n\t\tconst mapping = uboProgamMap.get( program );\n\t\tconst blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( uboBindings.get( uniformsGroup ) !== blockIndex ) {\n\n\t\t\t// bind shader specific block index to global block point\n\n\t\t\tgl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );\n\n\t\t\tuboBindings.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( gl.BLEND );\n\t\tgl.disable( gl.CULL_FACE );\n\t\tgl.disable( gl.DEPTH_TEST );\n\t\tgl.disable( gl.POLYGON_OFFSET_FILL );\n\t\tgl.disable( gl.SCISSOR_TEST );\n\t\tgl.disable( gl.STENCIL_TEST );\n\t\tgl.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\tgl.blendFunc( gl.ONE, gl.ZERO );\n\t\tgl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( gl.LESS );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( gl.ALWAYS, 0, 0xffffffff );\n\t\tgl.stencilOp( gl.KEEP, gl.KEEP, gl.KEEP );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( gl.BACK );\n\t\tgl.frontFace( gl.CCW );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( gl.TEXTURE0 );\n\n\t\tgl.bindFramebuffer( gl.FRAMEBUFFER, null );\n\n\t\tif ( isWebGL2 === true ) {\n\n\t\t\tgl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );\n\t\t\tgl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );\n\n\t\t}\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentBoundFramebuffers = {};\n\t\tcurrentDrawbuffers = new WeakMap();\n\t\tdefaultDrawbuffers = [];\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tdrawBuffers: drawBuffers,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\tcompressedTexImage3D: compressedTexImage3D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tupdateUBOMapping: updateUBOMapping,\n\t\tuniformBlockBinding: uniformBlockBinding,\n\n\t\ttexStorage2D: texStorage2D,\n\t\ttexStorage3D: texStorage3D,\n\t\ttexSubImage2D: texSubImage2D,\n\t\ttexSubImage3D: texSubImage3D,\n\t\tcompressedTexSubImage2D: compressedTexSubImage2D,\n\t\tcompressedTexSubImage3D: compressedTexSubImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nexport { WebGLState };\n","import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, sRGBEncoding, LinearEncoding, UnsignedByteType, _SRGBAFormat } from '../../constants.js';\nimport * as MathUtils from '../../math/MathUtils.js';\nimport { ImageUtils } from '../../extras/ImageUtils.js';\nimport { createElementNS } from '../../utils.js';\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\tconst multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;\n\tconst supportsInvalidateFramebuffer = /OculusBrowser/g.test( typeof navigator === 'undefined' ? '' : navigator.userAgent );\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\tconst _sources = new WeakMap(); // maps WebglTexture objects to instances of Source\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo( image ) {\n\n\t\treturn MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, encoding, forceLinearEncoding = false ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === _gl.RED ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.R32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGBA ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( encoding === sRGBEncoding && forceLinearEncoding === false ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;\n\n\t\t}\n\n\t\tif ( internalFormat === _gl.R16F || internalFormat === _gl.R32F ||\n\t\t\tinternalFormat === _gl.RG16F || internalFormat === _gl.RG32F ||\n\t\t\tinternalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\tfunction getMipLevels( texture, image, supportsMips ) {\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {\n\n\t\t\treturn Math.log2( Math.max( image.width, image.height ) ) + 1;\n\n\t\t} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {\n\n\t\t\t// user-defined mipmaps\n\n\t\t\treturn texture.mipmaps.length;\n\n\t\t} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {\n\n\t\t\treturn image.mipmaps.length;\n\n\t\t} else {\n\n\t\t\t// texture without mipmaps (only base level)\n\n\t\t\treturn 1;\n\n\t\t}\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {\n\n\t\t\treturn _gl.NEAREST;\n\n\t\t}\n\n\t\treturn _gl.LINEAR;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t// check if it's necessary to remove the WebGLTexture object\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures ) {\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\t\t\twebglTexture.usedTimes --;\n\n\t\t\t// the WebGLTexture object is not used anymore, remove it\n\n\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\tdeleteTexture( texture );\n\n\t\t\t}\n\n\t\t\t// remove the weak map entry if no WebGLTexture uses the source anymore\n\n\t\t\tif ( Object.keys( webglTextures ).length === 0 ) {\n\n\t\t\t\t_sources.delete( source );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deleteTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\t\tdelete webglTextures[ textureProperties.__cacheKey ];\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\tinfo.memory.textures --;\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) {\n\n\t\t\t\tfor ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = texture.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachmentProperties = properties.get( texture[ i ] );\n\n\t\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\t\tinfo.memory.textures --;\n\n\t\t\t\t}\n\n\t\t\t\tproperties.remove( texture[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tfunction getTextureCacheKey( texture ) {\n\n\t\tconst array = [];\n\n\t\tarray.push( texture.wrapS );\n\t\tarray.push( texture.wrapT );\n\t\tarray.push( texture.wrapR || 0 );\n\t\tarray.push( texture.magFilter );\n\t\tarray.push( texture.minFilter );\n\t\tarray.push( texture.anisotropy );\n\t\tarray.push( texture.internalFormat );\n\t\tarray.push( texture.format );\n\t\tarray.push( texture.type );\n\t\tarray.push( texture.generateMipmaps );\n\t\tarray.push( texture.premultiplyAlpha );\n\t\tarray.push( texture.flipY );\n\t\tarray.push( texture.unpackAlignment );\n\t\tarray.push( texture.encoding );\n\n\t\treturn array.join();\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: _gl.REPEAT,\n\t\t[ ClampToEdgeWrapping ]: _gl.CLAMP_TO_EDGE,\n\t\t[ MirroredRepeatWrapping ]: _gl.MIRRORED_REPEAT\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: _gl.NEAREST,\n\t\t[ NearestMipmapNearestFilter ]: _gl.NEAREST_MIPMAP_NEAREST,\n\t\t[ NearestMipmapLinearFilter ]: _gl.NEAREST_MIPMAP_LINEAR,\n\n\t\t[ LinearFilter ]: _gl.LINEAR,\n\t\t[ LinearMipmapNearestFilter ]: _gl.LINEAR_MIPMAP_NEAREST,\n\t\t[ LinearMipmapLinearFilter ]: _gl.LINEAR_MIPMAP_LINEAR\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\n\n\t\t\tif ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, _gl.CLAMP_TO_EDGE );\n\n\t\t\t}\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2\n\t\t\tif ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tlet forceUpload = false;\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t}\n\n\t\t// create Source <-> WebGLTextures mapping if necessary\n\n\t\tconst source = texture.source;\n\t\tlet webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures === undefined ) {\n\n\t\t\twebglTextures = {};\n\t\t\t_sources.set( source, webglTextures );\n\n\t\t}\n\n\t\t// check if there is already a WebGLTexture object for the given texture parameters\n\n\t\tconst textureCacheKey = getTextureCacheKey( texture );\n\n\t\tif ( textureCacheKey !== textureProperties.__cacheKey ) {\n\n\t\t\t// if not, create a new instance of WebGLTexture\n\n\t\t\tif ( webglTextures[ textureCacheKey ] === undefined ) {\n\n\t\t\t\t// create new entry\n\n\t\t\t\twebglTextures[ textureCacheKey ] = {\n\t\t\t\t\ttexture: _gl.createTexture(),\n\t\t\t\t\tusedTimes: 0\n\t\t\t\t};\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t// when a new instance of WebGLTexture was created, a texture upload is required\n\t\t\t\t// even if the image contents are identical\n\n\t\t\t\tforceUpload = true;\n\n\t\t\t}\n\n\t\t\twebglTextures[ textureCacheKey ].usedTimes ++;\n\n\t\t\t// every time the texture cache key changes, it's necessary to check if an instance of\n\t\t\t// WebGLTexture can be deleted in order to avoid a memory leak.\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\n\t\t\tif ( webglTexture !== undefined ) {\n\n\t\t\t\twebglTextures[ textureProperties.__cacheKey ].usedTimes --;\n\n\t\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\t\tdeleteTexture( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// store references to cache key and WebGLTexture object\n\n\t\t\ttextureProperties.__cacheKey = textureCacheKey;\n\t\t\ttextureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;\n\n\t\t}\n\n\t\treturn forceUpload;\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = _gl.TEXTURE_2D;\n\n\t\tif ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;\n\t\tif ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE );\n\n\t\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;\n\t\t\tlet image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\t\t\timage = verifyColorSpace( texture, image );\n\n\t\t\tconst supportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\t\tglFormat = utils.convert( texture.format, texture.encoding );\n\n\t\t\tlet glType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, texture.isVideoTexture );\n\n\t\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\t\tlet mipmap;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tconst useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst levels = getMipLevels( texture, image, supportsMips );\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\t// populate depth texture with dummy data\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT;\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT24;\n\n\t\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT16; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// validation checks for WebGL 1\n\n\t\t\t\tif ( texture.format === DepthFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedIntType;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture.format === DepthStencilFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {\n\n\t\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tglInternalFormat = _gl.DEPTH_STENCIL;\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tif ( texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataArrayTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isFramebufferTexture ) {\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet width = image.width, height = image.height;\n\n\t\t\t\t\t\tfor ( let i = 0; i < levels; i ++ ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t\t\t\t\twidth >>= 1;\n\t\t\t\t\t\t\theight >>= 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( textureType );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE );\n\n\t\t\tconst isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tsupportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\t\tglFormat = utils.convert( texture.format, texture.encoding ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\t\tconst useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tlet levels = getMipLevels( texture, image, supportsMips );\n\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t// TODO: Uniformly handle mipmap definitions\n\t\t\t\t\t// Normal textures and compressed cube textures define base level + mips with their mipmap array\n\t\t\t\t\t// Uncompressed cube textures use their mipmap array only for mips (no base level)\n\n\t\t\t\t\tif ( mipmaps.length > 0 ) levels ++;\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, cubeImage[ 0 ].width, cubeImage[ 0 ].height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {\n\n\t\tconst glFormat = utils.convert( texture.format, texture.encoding );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( ! renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\tif ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tstate.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );\n\n\t\t} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\tif ( isMultisample || useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT24;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );\n\n\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tconst glFormat = utils.convert( texture.format, texture.encoding );\n\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// rebind framebuffer with external textures\n\tfunction rebindTextures( renderTarget, colorTexture, depthTexture ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( colorTexture !== undefined ) {\n\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );\n\n\t\t}\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets !== true ) {\n\n\t\t\tif ( textureProperties.__webglTexture === undefined ) {\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );\n\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tif ( capabilities.drawBuffers ) {\n\n\t\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tconst textures = isMultipleRenderTargets ? texture : [ texture ];\n\n\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = [];\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tconst texture = textures[ i ];\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format, texture.encoding );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, renderTarget.isXRRenderTarget === true );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tconst textures = renderTarget.texture;\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {\n\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = _gl.TEXTURE_2D;\n\n\t\t\tif ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tglTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets ? renderTarget.texture : [ renderTarget.texture ];\n\t\t\tconst width = renderTarget.width;\n\t\t\tconst height = renderTarget.height;\n\t\t\tlet mask = _gl.COLOR_BUFFER_BIT;\n\t\t\tconst invalidationArray = [];\n\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\tconst isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );\n\n\t\t\t// If MRT we need to remove FBO attachments\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tinvalidationArray.push( _gl.COLOR_ATTACHMENT0 + i );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\tinvalidationArray.push( depthStyle );\n\n\t\t\t\t}\n\n\t\t\t\tconst ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false;\n\n\t\t\t\tif ( ignoreDepthValues === false ) {\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;\n\t\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t\t\t}\n\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ignoreDepthValues === true ) {\n\n\t\t\t\t\t_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, [ depthStyle ] );\n\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );\n\n\t\t\t\tif ( supportsInvalidateFramebuffer ) {\n\n\t\t\t\t\t_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );\n\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );\n\n\t\t\t// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn Math.min( maxSamples, renderTarget.samples );\n\n\t}\n\n\tfunction useMultisampledRTT( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\treturn isWebGL2 && renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tfunction verifyColorSpace( texture, image ) {\n\n\t\tconst encoding = texture.encoding;\n\t\tconst format = texture.format;\n\t\tconst type = texture.type;\n\n\t\tif ( texture.isCompressedTexture === true || texture.isVideoTexture === true || texture.format === _SRGBAFormat ) return image;\n\n\t\tif ( encoding !== LinearEncoding ) {\n\n\t\t\t// sRGB\n\n\t\t\tif ( encoding === sRGBEncoding ) {\n\n\t\t\t\tif ( isWebGL2 === false ) {\n\n\t\t\t\t\t// in WebGL 1, try to use EXT_sRGB extension and unsized formats\n\n\t\t\t\t\tif ( extensions.has( 'EXT_sRGB' ) === true && format === RGBAFormat ) {\n\n\t\t\t\t\t\ttexture.format = _SRGBAFormat;\n\n\t\t\t\t\t\t// it's not possible to generate mips in WebGL 1 with this extension\n\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// slow fallback (CPU decode)\n\n\t\t\t\t\t\timage = ImageUtils.sRGBToLinear( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format\n\n\t\t\t\t\tif ( format !== RGBAFormat || type !== UnsignedByteType ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.WebGLTextures: Unsupported texture encoding:', encoding );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.rebindTextures = rebindTextures;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\tthis.setupDepthRenderbuffer = setupDepthRenderbuffer;\n\tthis.setupFrameBufferTexture = setupFrameBufferTexture;\n\tthis.useMultisampledRTT = useMultisampledRTT;\n\n}\n\nexport { WebGLTextures };\n","import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, LuminanceAlphaFormat, LuminanceFormat, RedFormat, RGBFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, sRGBEncoding, _SRGBAFormat } from '../../constants.js';\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p, encoding = null ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return gl.HALF_FLOAT;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\t\tif ( p === RedFormat ) return gl.RED;\n\n\t\t// @deprecated since r137\n\n\t\tif ( p === RGBFormat ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: THREE.RGBFormat has been removed. Use THREE.RGBAFormat instead. https://github.com/mrdoob/three.js/pull/23228' );\n\t\t\treturn gl.RGBA;\n\n\t\t}\n\n\t\t// WebGL 1 sRGB fallback\n\n\t\tif ( p === _SRGBAFormat ) {\n\n\t\t\textension = extensions.get( 'EXT_sRGB' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.SRGB_ALPHA_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedIntegerFormat ) return gl.RED_INTEGER;\n\t\tif ( p === RGFormat ) return gl.RG;\n\t\tif ( p === RGIntegerFormat ) return gl.RG_INTEGER;\n\t\tif ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER;\n\n\t\t// S3TC\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\tif ( encoding === sRGBEncoding ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// PVRTC\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC1\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC2\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ASTC\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_ASTC_4x4_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x4_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x8_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x8_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x10_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x10_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x12_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// BPTC\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return gl.UNSIGNED_INT_24_8;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// if \"p\" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)\n\n\t\treturn ( gl[ p ] !== undefined ) ? gl[ p ] : null;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\n\nexport { WebGLUtils };\n","import { PerspectiveCamera } from './PerspectiveCamera.js';\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isArrayCamera = true;\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nexport { ArrayCamera };\n","function WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nexport { WebGLAnimation };\n","import { Object3D } from '../core/Object3D.js';\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isGroup = true;\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nexport { Group };\n","import { Vector3 } from '../../math/Vector3.js';\nimport { Group } from '../../objects/Group.js';\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\t\tconst joint = new Group();\n\t\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\t\t\t\t\t\t// ??\n\t\t\t\t\t\thand.add( joint );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst joint = hand.joints[ inputjoint.jointName ];\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t// Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it\n\t\t\t\tif ( inputPose === null && gripPose !== null ) {\n\n\t\t\t\t\tinputPose = gripPose;\n\n\t\t\t\t}\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n\nexport { WebXRController };\n","import { Texture } from './Texture.js';\nimport { NearestFilter, UnsignedIntType, UnsignedInt248Type, DepthFormat, DepthStencilFormat } from '../constants.js';\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\t\tformat = format !== undefined ? format : DepthFormat;\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedIntType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isDepthTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n\n}\n\nexport { DepthTexture };\n","import { ArrayCamera } from '../../cameras/ArrayCamera.js';\nimport { EventDispatcher } from '../../core/EventDispatcher.js';\nimport { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';\nimport { Vector3 } from '../../math/Vector3.js';\nimport { Vector4 } from '../../math/Vector4.js';\nimport { WebGLAnimation } from '../webgl/WebGLAnimation.js';\nimport { WebGLRenderTarget } from '../WebGLRenderTarget.js';\nimport { WebXRController } from './WebXRController.js';\nimport { DepthTexture } from '../../textures/DepthTexture.js';\nimport {\n\tDepthFormat,\n\tDepthStencilFormat,\n\tRGBAFormat,\n\tUnsignedByteType,\n\tUnsignedIntType,\n\tUnsignedInt248Type,\n} from '../../constants.js';\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\n\t\tlet session = null;\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\t\tlet customReferenceSpace = null;\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet xrFrame = null;\n\t\tconst attributes = gl.getContextAttributes();\n\t\tlet initialRenderTarget = null;\n\t\tlet newRenderTarget = null;\n\n\t\tconst controllers = [];\n\t\tconst controllerInputSources = [];\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraVR = new ArrayCamera();\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controllerIndex = controllerInputSources.indexOf( event.inputSource );\n\n\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\tif ( controller !== undefined ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tsession.removeEventListener( 'select', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'end', onSessionEnd );\n\t\t\tsession.removeEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\n\t\t\t\tif ( inputSource === null ) continue;\n\n\t\t\t\tcontrollerInputSources[ i ] = null;\n\n\t\t\t\tcontrollers[ i ].disconnect( inputSource );\n\n\t\t\t}\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\trenderer.setRenderTarget( initialRenderTarget );\n\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\t\t\tnewRenderTarget = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn customReferenceSpace || referenceSpace;\n\n\t\t};\n\n\t\tthis.setReferenceSpace = function ( space ) {\n\n\t\t\tcustomReferenceSpace = space;\n\n\t\t};\n\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\tthis.getBinding = function () {\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tinitialRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tif ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: ( session.renderState.layers === undefined ) ? attributes.antialias : true,\n\t\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglBaseLayer.framebufferWidth,\n\t\t\t\t\t\tglBaseLayer.framebufferHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tencoding: renderer.outputEncoding,\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet depthFormat = null;\n\t\t\t\t\tlet depthType = null;\n\t\t\t\t\tlet glDepthFormat = null;\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tglDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;\n\t\t\t\t\t\tdepthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: gl.RGBA8,\n\t\t\t\t\t\tdepthFormat: glDepthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\tglProjLayer.textureHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tdepthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\t\t\t\tencoding: renderer.outputEncoding,\n\t\t\t\t\t\t\tsamples: attributes.antialias ? 4 : 0\n\t\t\t\t\t\t} );\n\n\t\t\t\t\tconst renderTargetProperties = renderer.properties.get( newRenderTarget );\n\t\t\t\t\trenderTargetProperties.__ignoreDepthValues = glProjLayer.ignoreDepthValues;\n\n\t\t\t\t}\n\n\t\t\t\tnewRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278\n\n\t\t\t\t// Set foveation to maximum.\n\t\t\t\tthis.setFoveation( 1.0 );\n\n\t\t\t\tcustomReferenceSpace = null;\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst index = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( index >= 0 ) {\n\n\t\t\t\t\tcontrollerInputSources[ index ] = null;\n\t\t\t\t\tcontrollers[ index ].dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\n\t\t\t\tlet controllerIndex = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\t\t// Assign input source a controller that currently has no input source\n\n\t\t\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( i >= controllerInputSources.length ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources.push( inputSource );\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t} else if ( controllerInputSources[ i ] === null ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources[ i ] = inputSource;\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If all controllers do currently receive input we ignore new ones\n\n\t\t\t\t\tif ( controllerIndex === - 1 ) break;\n\n\t\t\t\t}\n\n\t\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\t\tdepthFar: cameraVR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraVR.cameras;\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\tcameraVR.matrixWorld.decompose( cameraVR.position, cameraVR.quaternion, cameraVR.scale );\n\n\t\t\t// update user camera and its children\n\n\t\t\tcamera.matrix.copy( cameraVR.matrix );\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\n\t\t\tconst children = camera.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\treturn glProjLayer.fixedFoveation;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\treturn glBaseLayer.fixedFoveation;\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\n\t\t};\n\n\t\tthis.setFoveation = function ( foveation ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = foveation;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = foveation;\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( customReferenceSpace || referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\trenderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );\n\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t\t// For side-by-side projection, we only produce a single texture for both eyes.\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\trenderer.setRenderTargetTextures(\n\t\t\t\t\t\t\t\tnewRenderTarget,\n\t\t\t\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\t\t\t\tglProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );\n\n\t\t\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet camera = cameras[ i ];\n\n\t\t\t\t\tif ( camera === undefined ) {\n\n\t\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\t\tcamera.layers.enable( i );\n\t\t\t\t\t\tcamera.viewport = new Vector4();\n\t\t\t\t\t\tcameras[ i ] = camera;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\t\t\t\tconst controller = controllers[ i ];\n\n\t\t\t\tif ( inputSource !== null && controller !== undefined ) {\n\n\t\t\t\t\tcontroller.update( inputSource, frame, customReferenceSpace || referenceSpace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nexport { WebXRManager };\n","function WebGLUniformsGroups( gl, info, capabilities, state ) {\n\n\tlet buffers = {};\n\tlet updateList = {};\n\tlet allocatedBindingPoints = [];\n\n\tconst maxBindingPoints = ( capabilities.isWebGL2 ) ? gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ) : 0; // binding points are global whereas block indices are per shader program\n\n\tfunction bind( uniformsGroup, program ) {\n\n\t\tconst webglProgram = program.program;\n\t\tstate.uniformBlockBinding( uniformsGroup, webglProgram );\n\n\t}\n\n\tfunction update( uniformsGroup, program ) {\n\n\t\tlet buffer = buffers[ uniformsGroup.id ];\n\n\t\tif ( buffer === undefined ) {\n\n\t\t\tprepareUniformsGroup( uniformsGroup );\n\n\t\t\tbuffer = createBuffer( uniformsGroup );\n\t\t\tbuffers[ uniformsGroup.id ] = buffer;\n\n\t\t\tuniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\t}\n\n\t\t// ensure to update the binding points/block indices mapping for this program\n\n\t\tconst webglProgram = program.program;\n\t\tstate.updateUBOMapping( uniformsGroup, webglProgram );\n\n\t\t// update UBO once per frame\n\n\t\tconst frame = info.render.frame;\n\n\t\tif ( updateList[ uniformsGroup.id ] !== frame ) {\n\n\t\t\tupdateBufferData( uniformsGroup );\n\n\t\t\tupdateList[ uniformsGroup.id ] = frame;\n\n\t\t}\n\n\t}\n\n\tfunction createBuffer( uniformsGroup ) {\n\n\t\t// the setup of an UBO is independent of a particular shader program but global\n\n\t\tconst bindingPointIndex = allocateBindingPointIndex();\n\t\tuniformsGroup.__bindingPointIndex = bindingPointIndex;\n\n\t\tconst buffer = gl.createBuffer();\n\t\tconst size = uniformsGroup.__size;\n\t\tconst usage = uniformsGroup.usage;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\t\tgl.bufferData( gl.UNIFORM_BUFFER, size, usage );\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\t\tgl.bindBufferBase( gl.UNIFORM_BUFFER, bindingPointIndex, buffer );\n\n\t\treturn buffer;\n\n\t}\n\n\tfunction allocateBindingPointIndex() {\n\n\t\tfor ( let i = 0; i < maxBindingPoints; i ++ ) {\n\n\t\t\tif ( allocatedBindingPoints.indexOf( i ) === - 1 ) {\n\n\t\t\t\tallocatedBindingPoints.push( i );\n\t\t\t\treturn i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );\n\n\t\treturn 0;\n\n\t}\n\n\tfunction updateBufferData( uniformsGroup ) {\n\n\t\tconst buffer = buffers[ uniformsGroup.id ];\n\t\tconst uniforms = uniformsGroup.uniforms;\n\t\tconst cache = uniformsGroup.__cache;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\n\t\tfor ( let i = 0, il = uniforms.length; i < il; i ++ ) {\n\n\t\t\tconst uniform = uniforms[ i ];\n\n\t\t\t// partly update the buffer if necessary\n\n\t\t\tif ( hasUniformChanged( uniform, i, cache ) === true ) {\n\n\t\t\t\tconst value = uniform.value;\n\t\t\t\tconst offset = uniform.__offset;\n\n\t\t\t\tif ( typeof value === 'number' ) {\n\n\t\t\t\t\tuniform.__data[ 0 ] = value;\n\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( uniform.value.isMatrix3 ) {\n\n\t\t\t\t\t\t// manually converting 3x3 to 3x4\n\n\t\t\t\t\t\tuniform.__data[ 0 ] = uniform.value.elements[ 0 ];\n\t\t\t\t\t\tuniform.__data[ 1 ] = uniform.value.elements[ 1 ];\n\t\t\t\t\t\tuniform.__data[ 2 ] = uniform.value.elements[ 2 ];\n\t\t\t\t\t\tuniform.__data[ 3 ] = uniform.value.elements[ 0 ];\n\t\t\t\t\t\tuniform.__data[ 4 ] = uniform.value.elements[ 3 ];\n\t\t\t\t\t\tuniform.__data[ 5 ] = uniform.value.elements[ 4 ];\n\t\t\t\t\t\tuniform.__data[ 6 ] = uniform.value.elements[ 5 ];\n\t\t\t\t\t\tuniform.__data[ 7 ] = uniform.value.elements[ 0 ];\n\t\t\t\t\t\tuniform.__data[ 8 ] = uniform.value.elements[ 6 ];\n\t\t\t\t\t\tuniform.__data[ 9 ] = uniform.value.elements[ 7 ];\n\t\t\t\t\t\tuniform.__data[ 10 ] = uniform.value.elements[ 8 ];\n\t\t\t\t\t\tuniform.__data[ 11 ] = uniform.value.elements[ 0 ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvalue.toArray( uniform.__data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\n\t}\n\n\tfunction hasUniformChanged( uniform, index, cache ) {\n\n\t\tconst value = uniform.value;\n\n\t\tif ( cache[ index ] === undefined ) {\n\n\t\t\t// cache entry does not exist so far\n\n\t\t\tif ( typeof value === 'number' ) {\n\n\t\t\t\tcache[ index ] = value;\n\n\t\t\t} else {\n\n\t\t\t\tcache[ index ] = value.clone();\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\t// compare current value with cached entry\n\n\t\t\tif ( typeof value === 'number' ) {\n\n\t\t\t\tif ( cache[ index ] !== value ) {\n\n\t\t\t\t\tcache[ index ] = value;\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst cachedObject = cache[ index ];\n\n\t\t\t\tif ( cachedObject.equals( value ) === false ) {\n\n\t\t\t\t\tcachedObject.copy( value );\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction prepareUniformsGroup( uniformsGroup ) {\n\n\t\t// determine total buffer size according to the STD140 layout\n\t\t// Hint: STD140 is the only supported layout in WebGL 2\n\n\t\tconst uniforms = uniformsGroup.uniforms;\n\n\t\tlet offset = 0; // global buffer offset in bytes\n\t\tconst chunkSize = 16; // size of a chunk in bytes\n\t\tlet chunkOffset = 0; // offset within a single chunk in bytes\n\n\t\tfor ( let i = 0, l = uniforms.length; i < l; i ++ ) {\n\n\t\t\tconst uniform = uniforms[ i ];\n\t\t\tconst info = getUniformSize( uniform );\n\n\t\t\t// the following two properties will be used for partial buffer updates\n\n\t\t\tuniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );\n\t\t\tuniform.__offset = offset;\n\n\t\t\t//\n\n\t\t\tif ( i > 0 ) {\n\n\t\t\t\tchunkOffset = offset % chunkSize;\n\n\t\t\t\tconst remainingSizeInChunk = chunkSize - chunkOffset;\n\n\t\t\t\t// check for chunk overflow\n\n\t\t\t\tif ( chunkOffset !== 0 && ( remainingSizeInChunk - info.boundary ) < 0 ) {\n\n\t\t\t\t\t// add padding and adjust offset\n\n\t\t\t\t\toffset += ( chunkSize - chunkOffset );\n\t\t\t\t\tuniform.__offset = offset;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset += info.storage;\n\n\t\t}\n\n\t\t// ensure correct final padding\n\n\t\tchunkOffset = offset % chunkSize;\n\n\t\tif ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );\n\n\t\t//\n\n\t\tuniformsGroup.__size = offset;\n\t\tuniformsGroup.__cache = {};\n\n\t\treturn this;\n\n\t}\n\n\tfunction getUniformSize( uniform ) {\n\n\t\tconst value = uniform.value;\n\n\t\tconst info = {\n\t\t\tboundary: 0, // bytes\n\t\t\tstorage: 0 // bytes\n\t\t};\n\n\t\t// determine sizes according to STD140\n\n\t\tif ( typeof value === 'number' ) {\n\n\t\t\t// float/int\n\n\t\t\tinfo.boundary = 4;\n\t\t\tinfo.storage = 4;\n\n\t\t} else if ( value.isVector2 ) {\n\n\t\t\t// vec2\n\n\t\t\tinfo.boundary = 8;\n\t\t\tinfo.storage = 8;\n\n\t\t} else if ( value.isVector3 || value.isColor ) {\n\n\t\t\t// vec3\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes\n\n\t\t} else if ( value.isVector4 ) {\n\n\t\t\t// vec4\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 16;\n\n\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t// mat3 (in STD140 a 3x3 matrix is represented as 3x4)\n\n\t\t\tinfo.boundary = 48;\n\t\t\tinfo.storage = 48;\n\n\t\t} else if ( value.isMatrix4 ) {\n\n\t\t\t// mat4\n\n\t\t\tinfo.boundary = 64;\n\t\t\tinfo.storage = 64;\n\n\t\t} else if ( value.isTexture ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value );\n\n\t\t}\n\n\t\treturn info;\n\n\t}\n\n\tfunction onUniformsGroupsDispose( event ) {\n\n\t\tconst uniformsGroup = event.target;\n\n\t\tuniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\tconst index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );\n\t\tallocatedBindingPoints.splice( index, 1 );\n\n\t\tgl.deleteBuffer( buffers[ uniformsGroup.id ] );\n\n\t\tdelete buffers[ uniformsGroup.id ];\n\t\tdelete updateList[ uniformsGroup.id ];\n\n\t}\n\n\tfunction dispose() {\n\n\t\tfor ( const id in buffers ) {\n\n\t\t\tgl.deleteBuffer( buffers[ id ] );\n\n\t\t}\n\n\t\tallocatedBindingPoints = [];\n\t\tbuffers = {};\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tbind: bind,\n\t\tupdate: update,\n\n\t\tdispose: dispose\n\n\t};\n\n}\n\n\nexport { WebGLUniformsGroups };\n","function WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nexport { WebGLAnimation };\n","export const REVISION = '146';\nexport const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nexport const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nexport const CullFaceNone = 0;\nexport const CullFaceBack = 1;\nexport const CullFaceFront = 2;\nexport const CullFaceFrontBack = 3;\nexport const BasicShadowMap = 0;\nexport const PCFShadowMap = 1;\nexport const PCFSoftShadowMap = 2;\nexport const VSMShadowMap = 3;\nexport const FrontSide = 0;\nexport const BackSide = 1;\nexport const DoubleSide = 2;\nexport const NoBlending = 0;\nexport const NormalBlending = 1;\nexport const AdditiveBlending = 2;\nexport const SubtractiveBlending = 3;\nexport const MultiplyBlending = 4;\nexport const CustomBlending = 5;\nexport const AddEquation = 100;\nexport const SubtractEquation = 101;\nexport const ReverseSubtractEquation = 102;\nexport const MinEquation = 103;\nexport const MaxEquation = 104;\nexport const ZeroFactor = 200;\nexport const OneFactor = 201;\nexport const SrcColorFactor = 202;\nexport const OneMinusSrcColorFactor = 203;\nexport const SrcAlphaFactor = 204;\nexport const OneMinusSrcAlphaFactor = 205;\nexport const DstAlphaFactor = 206;\nexport const OneMinusDstAlphaFactor = 207;\nexport const DstColorFactor = 208;\nexport const OneMinusDstColorFactor = 209;\nexport const SrcAlphaSaturateFactor = 210;\nexport const NeverDepth = 0;\nexport const AlwaysDepth = 1;\nexport const LessDepth = 2;\nexport const LessEqualDepth = 3;\nexport const EqualDepth = 4;\nexport const GreaterEqualDepth = 5;\nexport const GreaterDepth = 6;\nexport const NotEqualDepth = 7;\nexport const MultiplyOperation = 0;\nexport const MixOperation = 1;\nexport const AddOperation = 2;\nexport const NoToneMapping = 0;\nexport const LinearToneMapping = 1;\nexport const ReinhardToneMapping = 2;\nexport const CineonToneMapping = 3;\nexport const ACESFilmicToneMapping = 4;\nexport const CustomToneMapping = 5;\n\nexport const UVMapping = 300;\nexport const CubeReflectionMapping = 301;\nexport const CubeRefractionMapping = 302;\nexport const EquirectangularReflectionMapping = 303;\nexport const EquirectangularRefractionMapping = 304;\nexport const CubeUVReflectionMapping = 306;\nexport const RepeatWrapping = 1000;\nexport const ClampToEdgeWrapping = 1001;\nexport const MirroredRepeatWrapping = 1002;\nexport const NearestFilter = 1003;\nexport const NearestMipmapNearestFilter = 1004;\nexport const NearestMipMapNearestFilter = 1004;\nexport const NearestMipmapLinearFilter = 1005;\nexport const NearestMipMapLinearFilter = 1005;\nexport const LinearFilter = 1006;\nexport const LinearMipmapNearestFilter = 1007;\nexport const LinearMipMapNearestFilter = 1007;\nexport const LinearMipmapLinearFilter = 1008;\nexport const LinearMipMapLinearFilter = 1008;\nexport const UnsignedByteType = 1009;\nexport const ByteType = 1010;\nexport const ShortType = 1011;\nexport const UnsignedShortType = 1012;\nexport const IntType = 1013;\nexport const UnsignedIntType = 1014;\nexport const FloatType = 1015;\nexport const HalfFloatType = 1016;\nexport const UnsignedShort4444Type = 1017;\nexport const UnsignedShort5551Type = 1018;\nexport const UnsignedInt248Type = 1020;\nexport const AlphaFormat = 1021;\nexport const RGBFormat = 1022; // @deprecated since r137\nexport const RGBAFormat = 1023;\nexport const LuminanceFormat = 1024;\nexport const LuminanceAlphaFormat = 1025;\nexport const DepthFormat = 1026;\nexport const DepthStencilFormat = 1027;\nexport const RedFormat = 1028;\nexport const RedIntegerFormat = 1029;\nexport const RGFormat = 1030;\nexport const RGIntegerFormat = 1031;\nexport const RGBAIntegerFormat = 1033;\n\nexport const RGB_S3TC_DXT1_Format = 33776;\nexport const RGBA_S3TC_DXT1_Format = 33777;\nexport const RGBA_S3TC_DXT3_Format = 33778;\nexport const RGBA_S3TC_DXT5_Format = 33779;\nexport const RGB_PVRTC_4BPPV1_Format = 35840;\nexport const RGB_PVRTC_2BPPV1_Format = 35841;\nexport const RGBA_PVRTC_4BPPV1_Format = 35842;\nexport const RGBA_PVRTC_2BPPV1_Format = 35843;\nexport const RGB_ETC1_Format = 36196;\nexport const RGB_ETC2_Format = 37492;\nexport const RGBA_ETC2_EAC_Format = 37496;\nexport const RGBA_ASTC_4x4_Format = 37808;\nexport const RGBA_ASTC_5x4_Format = 37809;\nexport const RGBA_ASTC_5x5_Format = 37810;\nexport const RGBA_ASTC_6x5_Format = 37811;\nexport const RGBA_ASTC_6x6_Format = 37812;\nexport const RGBA_ASTC_8x5_Format = 37813;\nexport const RGBA_ASTC_8x6_Format = 37814;\nexport const RGBA_ASTC_8x8_Format = 37815;\nexport const RGBA_ASTC_10x5_Format = 37816;\nexport const RGBA_ASTC_10x6_Format = 37817;\nexport const RGBA_ASTC_10x8_Format = 37818;\nexport const RGBA_ASTC_10x10_Format = 37819;\nexport const RGBA_ASTC_12x10_Format = 37820;\nexport const RGBA_ASTC_12x12_Format = 37821;\nexport const RGBA_BPTC_Format = 36492;\nexport const LoopOnce = 2200;\nexport const LoopRepeat = 2201;\nexport const LoopPingPong = 2202;\nexport const InterpolateDiscrete = 2300;\nexport const InterpolateLinear = 2301;\nexport const InterpolateSmooth = 2302;\nexport const ZeroCurvatureEnding = 2400;\nexport const ZeroSlopeEnding = 2401;\nexport const WrapAroundEnding = 2402;\nexport const NormalAnimationBlendMode = 2500;\nexport const AdditiveAnimationBlendMode = 2501;\nexport const TrianglesDrawMode = 0;\nexport const TriangleStripDrawMode = 1;\nexport const TriangleFanDrawMode = 2;\nexport const LinearEncoding = 3000;\nexport const sRGBEncoding = 3001;\nexport const BasicDepthPacking = 3200;\nexport const RGBADepthPacking = 3201;\nexport const TangentSpaceNormalMap = 0;\nexport const ObjectSpaceNormalMap = 1;\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\nexport const NoColorSpace = '';\nexport const SRGBColorSpace = 'srgb';\nexport const LinearSRGBColorSpace = 'srgb-linear';\n\nexport const ZeroStencilOp = 0;\nexport const KeepStencilOp = 7680;\nexport const ReplaceStencilOp = 7681;\nexport const IncrementStencilOp = 7682;\nexport const DecrementStencilOp = 7683;\nexport const IncrementWrapStencilOp = 34055;\nexport const DecrementWrapStencilOp = 34056;\nexport const InvertStencilOp = 5386;\n\nexport const NeverStencilFunc = 512;\nexport const LessStencilFunc = 513;\nexport const EqualStencilFunc = 514;\nexport const LessEqualStencilFunc = 515;\nexport const GreaterStencilFunc = 516;\nexport const NotEqualStencilFunc = 517;\nexport const GreaterEqualStencilFunc = 518;\nexport const AlwaysStencilFunc = 519;\n\nexport const StaticDrawUsage = 35044;\nexport const DynamicDrawUsage = 35048;\nexport const StreamDrawUsage = 35040;\nexport const StaticReadUsage = 35045;\nexport const DynamicReadUsage = 35049;\nexport const StreamReadUsage = 35041;\nexport const StaticCopyUsage = 35046;\nexport const DynamicCopyUsage = 35050;\nexport const StreamCopyUsage = 35042;\n\nexport const GLSL1 = '100';\nexport const GLSL3 = '300 es';\n\nexport const _SRGBAFormat = 1035; // fallback for WebGL 1\n","const _lut = [ '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' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\n\n\nexport {\n\tDEG2RAD,\n\tRAD2DEG,\n\tgenerateUUID,\n\tclamp,\n\teuclideanModulo,\n\tmapLinear,\n\tinverseLerp,\n\tlerp,\n\tdamp,\n\tpingpong,\n\tsmoothstep,\n\tsmootherstep,\n\trandInt,\n\trandFloat,\n\trandFloatSpread,\n\tseededRandom,\n\tdegToRad,\n\tradToDeg,\n\tisPowerOfTwo,\n\tceilPowerOfTwo,\n\tfloorPowerOfTwo,\n\tsetQuaternionFromProperEuler,\n\tnormalize,\n\tdenormalize,\n};\n","import * as MathUtils from './MathUtils.js';\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( MathUtils.clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// Derived from http://planning.cs.uiuc.edu/node198.html\n\t\t// Note, this source uses w, x, y, z ordering,\n\t\t// so we swap the order below.\n\n\t\tconst u1 = Math.random();\n\t\tconst sqrt1u1 = Math.sqrt( 1 - u1 );\n\t\tconst sqrtu1 = Math.sqrt( u1 );\n\n\t\tconst u2 = 2 * Math.PI * Math.random();\n\n\t\tconst u3 = 2 * Math.PI * Math.random();\n\n\t\treturn this.set(\n\t\t\tsqrt1u1 * Math.cos( u2 ),\n\t\t\tsqrtu1 * Math.sin( u3 ),\n\t\t\tsqrtu1 * Math.cos( u3 ),\n\t\t\tsqrt1u1 * Math.sin( u2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nexport { Quaternion };\n","import * as MathUtils from './MathUtils.js';\nimport { Quaternion } from './Quaternion.js';\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tVector3.prototype.isVector3 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( MathUtils.clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// Derived from https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst u = ( Math.random() - 0.5 ) * 2;\n\t\tconst t = Math.random() * Math.PI * 2;\n\t\tconst f = Math.sqrt( 1 - u ** 2 );\n\n\t\tthis.x = f * Math.cos( t );\n\t\tthis.y = f * Math.sin( t );\n\t\tthis.z = u;\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\n\nexport { Vector3 };\n","class Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tVector2.prototype.isVector2 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nexport { Vector2 };\n","import { Vector3 } from './Vector3.js';\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox3 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object, precise = false ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object, precise );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object, precise = false ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( precise && geometry.attributes != undefined && geometry.attributes.position !== undefined ) {\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tfor ( let i = 0, l = position.count; i < l; i ++ ) {\n\n\t\t\t\t\t_vector.fromBufferAttribute( position, i ).applyMatrix4( object.matrixWorld );\n\t\t\t\t\tthis.expandByPoint( _vector );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t}\n\n\t\t\t\t_box.copy( geometry.boundingBox );\n\t\t\t\t_box.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tthis.union( _box );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ], precise );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0.subVectors( triangle.a, _center );\n\t\t_v1.subVectors( triangle.b, _center );\n\t\t_v2.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1, _v0 );\n\t\t_f1.subVectors( _v2, _v1 );\n\t\t_f2.subVectors( _v0, _v2 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0, _v1, _v2, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tthis.getCenter( target.center );\n\n\t\ttarget.radius = this.getSize( _vector ).length() * 0.5;\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector = /*@__PURE__*/ new Vector3();\n\nconst _box = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the separating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the separating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is separating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nexport { Box3 };\n","/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\n\nexport { EventDispatcher };\n","import { Vector3 } from '../math/Vector3.js';\nimport { Vector2 } from '../math/Vector2.js';\nimport { denormalize, normalize } from '../math/MathUtils.js';\nimport { StaticDrawUsage } from '../constants.js';\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.isBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized === true;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2.fromBufferAttribute( this, i );\n\t\t\t\t_vector2.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2.x, _vector2.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector.fromBufferAttribute( this, i );\n\t\t\t\t_vector.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector.x, _vector.y, _vector.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector.fromBufferAttribute( this, i );\n\n\t\t\t_vector.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector.fromBufferAttribute( this, i );\n\n\t\t\t_vector.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector.fromBufferAttribute( this, i );\n\n\t\t\t_vector.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\t// Matching BufferAttribute constructor, do not normalize the array.\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.array[ index * this.itemSize ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.array[ index * this.itemSize + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.array[ index * this.itemSize + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.array[ index * this.itemSize + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.from( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\t\tif ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;\n\n\t\treturn data;\n\n\t}\n\n\t// @deprecated\n\n\tcopyColorsArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyColorsArray() was removed in r144.' );\n\n\t}\n\n\tcopyVector2sArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyVector2sArray() was removed in r144.' );\n\n\t}\n\n\tcopyVector3sArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyVector3sArray() was removed in r144.' );\n\n\t}\n\n\tcopyVector4sArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyVector4sArray() was removed in r144.' );\n\n\t}\n\n}\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t\tthis.isFloat16BufferAttribute = true;\n\n\t}\n\n}\n\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float64BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float64Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\n//\n\nexport {\n\tFloat64BufferAttribute,\n\tFloat32BufferAttribute,\n\tFloat16BufferAttribute,\n\tUint32BufferAttribute,\n\tInt32BufferAttribute,\n\tUint16BufferAttribute,\n\tInt16BufferAttribute,\n\tUint8ClampedBufferAttribute,\n\tUint8BufferAttribute,\n\tInt8BufferAttribute,\n\tBufferAttribute\n};\n","import { Box3 } from './Box3.js';\nimport { Vector3 } from './Vector3.js';\n\nconst _box = /*@__PURE__*/ new Box3();\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.center.copy( point );\n\n\t\t\tthis.radius = 0;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_v1.subVectors( point, this.center );\n\n\t\tconst lengthSq = _v1.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t// calculate the minimal sphere\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\n\t\t\tconst delta = ( length - this.radius ) * 0.5;\n\n\t\t\tthis.center.addScaledVector( _v1, delta / length );\n\n\t\t\tthis.radius += delta;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\tif ( sphere.isEmpty() ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.copy( sphere );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.center.equals( sphere.center ) === true ) {\n\n\t\t\t this.radius = Math.max( this.radius, sphere.radius );\n\n\t\t} else {\n\n\t\t\t_v2.subVectors( sphere.center, this.center ).setLength( sphere.radius );\n\n\t\t\tthis.expandByPoint( _v1.copy( sphere.center ).add( _v2 ) );\n\n\t\t\tthis.expandByPoint( _v1.copy( sphere.center ).sub( _v2 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nexport { Sphere };\n","import { Vector3 } from './Vector3.js';\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tMatrix4.prototype.isMatrix4 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1.elements[ 0 ] *= invSX;\n\t\t_m1.elements[ 1 ] *= invSX;\n\t\t_m1.elements[ 2 ] *= invSX;\n\n\t\t_m1.elements[ 4 ] *= invSY;\n\t\t_m1.elements[ 5 ] *= invSY;\n\t\t_m1.elements[ 6 ] *= invSY;\n\n\t\t_m1.elements[ 8 ] *= invSZ;\n\t\t_m1.elements[ 9 ] *= invSZ;\n\t\t_m1.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nexport { Matrix4 };\n","import { Quaternion } from './Quaternion.js';\nimport { Matrix4 } from './Matrix4.js';\nimport { clamp } from './MathUtils.js';\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\tthis.isEuler = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._order;\n\n\t}\n\n\t// @deprecated since r138, 02cf0df1cb4575d5842fef9c85bb5a89fe020d53\n\n\ttoVector3() {\n\n\t\tconsole.error( 'THREE.Euler: .toVector3() has been removed. Use Vector3.setFromEuler() instead' );\n\n\t}\n\n}\n\nEuler.DefaultOrder = 'XYZ';\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nexport { Euler };\n","class Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = ( 1 << channel | 0 ) >>> 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n\tisEnabled( channel ) {\n\n\t\treturn ( this.mask & ( 1 << channel | 0 ) ) !== 0;\n\n\t}\n\n}\n\n\nexport { Layers };\n","class Matrix3 {\n\n\tconstructor() {\n\n\t\tMatrix3.prototype.isMatrix3 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tscale( sx, sy ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tconst te = this.elements;\n\n\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tconst a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nexport { Matrix3 };\n","import { Quaternion } from '../math/Quaternion.js';\nimport { Vector3 } from '../math/Vector3.js';\nimport { Matrix4 } from '../math/Matrix4.js';\nimport { EventDispatcher } from './EventDispatcher.js';\nimport { Euler } from '../math/Euler.js';\nimport { Layers } from './Layers.js';\nimport { Matrix3 } from '../math/Matrix3.js';\nimport * as MathUtils from '../math/MathUtils.js';\n\nlet _object3DId = 0;\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isObject3D = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DefaultUp.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.matrixWorldAutoUpdate = Object3D.DefaultMatrixWorldAutoUpdate; // checked by the renderer\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1.lookAt( _position, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1.lookAt( _target, _position, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1 );\n\n\t\tthis.add( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position, target, _scale );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast( /* raycaster, intersects */ ) {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tif ( child.matrixWorldAutoUpdate === true || force === true ) {\n\n\t\t\t\tchild.updateMatrixWorld( force );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null && parent.matrixWorldAutoUpdate === true ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tif ( child.matrixWorldAutoUpdate === true ) {\n\n\t\t\t\t\tchild.updateWorldMatrix( false, true );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\t\t\tif ( nodes.length > 0 ) output.nodes = nodes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DefaultUp = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\nObject3D.DefaultMatrixWorldAutoUpdate = true;\n\nexport { Object3D };\n","function arrayMin( array ) {\n\n\tif ( array.length === 0 ) return Infinity;\n\n\tlet min = array[ 0 ];\n\n\tfor ( let i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] < min ) min = array[ i ];\n\n\t}\n\n\treturn min;\n\n}\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tlet max = array[ 0 ];\n\n\tfor ( let i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\nfunction arrayNeedsUint32( array ) {\n\n\t// assumes larger values usually on last\n\n\tfor ( let i = array.length - 1; i >= 0; -- i ) {\n\n\t\tif ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\n\t}\n\n\treturn false;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\nexport { arrayMin, arrayMax, arrayNeedsUint32, getTypedArray, createElementNS };\n","import { Vector3 } from '../math/Vector3.js';\nimport { Vector2 } from '../math/Vector2.js';\nimport { Box3 } from '../math/Box3.js';\nimport { EventDispatcher } from './EventDispatcher.js';\nimport { BufferAttribute, Float32BufferAttribute, Uint16BufferAttribute, Uint32BufferAttribute } from './BufferAttribute.js';\nimport { Sphere } from '../math/Sphere.js';\nimport { Object3D } from './Object3D.js';\nimport { Matrix4 } from '../math/Matrix4.js';\nimport { Matrix3 } from '../math/Matrix3.js';\nimport * as MathUtils from '../math/MathUtils.js';\nimport { arrayNeedsUint32 } from '../utils.js';\n\nlet _id = 0;\n\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBufferGeometry = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector.addVectors( this.boundingBox.min, _box.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector );\n\n\t\t\t\t\t\t_vector.addVectors( this.boundingBox.max, _box.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector.addVectors( _box.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box.expandByPoint( _vector );\n\n\t\t\t\t\t\t_vector.addVectors( _box.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box.expandByPoint( _vector );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst indices = index.array;\n\t\tconst positions = attributes.position.array;\n\t\tconst normals = attributes.normal.array;\n\t\tconst uvs = attributes.uv.array;\n\n\t\tconst nVertices = positions.length / 3;\n\n\t\tif ( this.hasAttribute( 'tangent' ) === false ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );\n\n\t\t}\n\n\t\tconst tangents = this.getAttribute( 'tangent' ).array;\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < nVertices; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromArray( positions, a * 3 );\n\t\t\tvB.fromArray( positions, b * 3 );\n\t\t\tvC.fromArray( positions, c * 3 );\n\n\t\t\tuvA.fromArray( uvs, a * 2 );\n\t\t\tuvB.fromArray( uvs, b * 2 );\n\t\t\tuvC.fromArray( uvs, c * 2 );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: indices.length\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindices[ j + 0 ],\n\t\t\t\t\tindices[ j + 1 ],\n\t\t\t\t\tindices[ j + 2 ]\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromArray( normals, v * 3 );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangents[ v * 4 ] = tmp.x;\n\t\t\ttangents[ v * 4 + 1 ] = tmp.y;\n\t\t\ttangents[ v * 4 + 2 ] = tmp.z;\n\t\t\ttangents[ v * 4 + 3 ] = w;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( indices[ j + 0 ] );\n\t\t\t\thandleVertex( indices[ j + 1 ] );\n\t\t\t\thandleVertex( indices[ j + 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t// @deprecated since r144\n\n\tmerge() {\n\n\t\tconsole.error( 'THREE.BufferGeometry.merge() has been removed. Use THREE.BufferGeometryUtils.mergeBufferGeometries() instead.' );\n\t\treturn this;\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector.fromBufferAttribute( normals, i );\n\n\t\t\t_vector.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\t return new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\t// geometry generator parameters\n\n\t\tif ( source.parameters !== undefined ) this.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nexport { BufferGeometry };\n","import { BufferGeometry } from '../core/BufferGeometry.js';\nimport { Float32BufferAttribute } from '../core/BufferAttribute.js';\nimport { Vector3 } from '../math/Vector3.js';\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\nexport { BoxGeometry };\n","import { BufferGeometry } from '../core/BufferGeometry.js';\nimport { Float32BufferAttribute } from '../core/BufferAttribute.js';\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\nexport { PlaneGeometry };\n","import { EventDispatcher } from '../core/EventDispatcher.js';\nimport { FrontSide, NormalBlending, LessEqualDepth, AddEquation, OneMinusSrcAlphaFactor, SrcAlphaFactor, AlwaysStencilFunc, KeepStencilOp } from '../constants.js';\nimport * as MathUtils from '../math/MathUtils.js';\n\nlet materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isMaterial = true;\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Material: \\'' + key + '\\' parameter is undefined.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': \\'' + key + '\\' is not a property of this material.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\t\tdata.colorWrite = this.colorWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nexport { Material };\n","/**\n * Uniform Utilities\n */\n\nexport function cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nexport function mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\nexport function cloneUniformsGroups( src ) {\n\n\tconst dst = [];\n\n\tfor ( let u = 0; u < src.length; u ++ ) {\n\n\t\tdst.push( src[ u ].clone() );\n\n\t}\n\n\treturn dst;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nexport { UniformsUtils };\n","export default /* glsl */`\nvoid main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}\n`;\n","import { Material } from './Material.js';\nimport { cloneUniforms, cloneUniformsGroups } from '../renderers/shaders/UniformsUtils.js';\n\nimport default_vertex from '../renderers/shaders/ShaderChunk/default_vertex.glsl.js';\nimport default_fragment from '../renderers/shaders/ShaderChunk/default_fragment.glsl.js';\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShaderMaterial = true;\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\t\tthis.uniformsGroups = [];\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\t\tthis.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nexport { ShaderMaterial };\n","export default /* glsl */`\nvoid main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}\n`;\n","import { SRGBColorSpace, LinearSRGBColorSpace } from '../constants.js';\n\nexport function SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nexport function LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\n// JavaScript RGB-to-RGB transforms, defined as\n// FN[InputColorSpace][OutputColorSpace] callback functions.\nconst FN = {\n\t[ SRGBColorSpace ]: { [ LinearSRGBColorSpace ]: SRGBToLinear },\n\t[ LinearSRGBColorSpace ]: { [ SRGBColorSpace ]: LinearToSRGB },\n};\n\nexport const ColorManagement = {\n\n\tlegacyMode: true,\n\n\tget workingColorSpace() {\n\n\t\treturn LinearSRGBColorSpace;\n\n\t},\n\n\tset workingColorSpace( colorSpace ) {\n\n\t\tconsole.warn( 'THREE.ColorManagement: .workingColorSpace is readonly.' );\n\n\t},\n\n\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\tif ( this.legacyMode || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tif ( FN[ sourceColorSpace ] && FN[ sourceColorSpace ][ targetColorSpace ] !== undefined ) {\n\n\t\t\tconst fn = FN[ sourceColorSpace ][ targetColorSpace ];\n\n\t\t\tcolor.r = fn( color.r );\n\t\t\tcolor.g = fn( color.g );\n\t\t\tcolor.b = fn( color.b );\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tthrow new Error( 'Unsupported color space conversion.' );\n\n\t},\n\n\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\treturn this.convert( color, this.workingColorSpace, targetColorSpace );\n\n\t},\n\n\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\treturn this.convert( color, sourceColorSpace, this.workingColorSpace );\n\n\t},\n\n};\n","import { clamp, euclideanModulo, lerp } from './MathUtils.js';\nimport { ColorManagement, SRGBToLinear, LinearToSRGB } from './ColorManagement.js';\nimport { SRGBColorSpace, LinearSRGBColorSpace } from '../constants.js';\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _rgb = { r: 0, g: 0, b: 0 };\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction toComponents( source, target ) {\n\n\ttarget.r = source.r;\n\ttarget.g = source.g;\n\ttarget.b = source.b;\n\n\treturn target;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tthis.isColor = true;\n\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b, colorSpace = LinearSRGBColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l, colorSpace = LinearSRGBColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseFloat( color[ 2 ] ) / 100;\n\t\t\t\t\t\tconst l = parseFloat( color[ 3 ] ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l, colorSpace );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\treturn clamp( _rgb.r * 255, 0, 255 ) << 16 ^ clamp( _rgb.g * 255, 0, 255 ) << 8 ^ clamp( _rgb.b * 255, 0, 255 ) << 0;\n\n\t}\n\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target, colorSpace = LinearSRGBColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\tconst r = _rgb.r, g = _rgb.g, b = _rgb.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetRGB( target, colorSpace = LinearSRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\ttarget.r = _rgb.r;\n\t\ttarget.g = _rgb.g;\n\t\ttarget.b = _rgb.b;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( toComponents( this, _rgb ), colorSpace );\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ _rgb.r } ${ _rgb.g } ${ _rgb.b })`;\n\n\t\t}\n\n\t\treturn `rgb(${( _rgb.r * 255 ) | 0},${( _rgb.g * 255 ) | 0},${( _rgb.b * 255 ) | 0})`;\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\n\nexport { Color, SRGBToLinear };\n","import { Vector3 } from './Vector3.js';\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector.dot( this.direction );\n\t\tconst d2 = _vector.dot( _vector ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\t\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nexport { Ray };\n","import { Vector3 } from './Vector3.js';\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0.subVectors( a, b );\n\t\ttarget.cross( _v0 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0.subVectors( c, a );\n\t\t_v1.subVectors( b, a );\n\t\t_v2.subVectors( point, a );\n\n\t\tconst dot00 = _v0.dot( _v0 );\n\t\tconst dot01 = _v0.dot( _v1 );\n\t\tconst dot02 = _v0.dot( _v2 );\n\t\tconst dot11 = _v1.dot( _v1 );\n\t\tconst dot12 = _v1.dot( _v2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3 );\n\n\t\treturn ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3.x );\n\t\ttarget.addScaledVector( uv2, _v3.y );\n\t\ttarget.addScaledVector( uv3, _v3.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0.subVectors( c, b );\n\t\t_v1.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0.cross( _v1 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0.subVectors( this.c, this.b );\n\t\t_v1.subVectors( this.a, this.b );\n\n\t\treturn _v0.cross( _v1 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nexport { Triangle };\n","import { Material } from './Material.js';\nimport { MultiplyOperation } from '../constants.js';\nimport { Color } from '../math/Color.js';\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { MeshBasicMaterial };\n","import { Vector3 } from '../math/Vector3.js';\nimport { Vector2 } from '../math/Vector2.js';\nimport { Sphere } from '../math/Sphere.js';\nimport { Ray } from '../math/Ray.js';\nimport { Matrix4 } from '../math/Matrix4.js';\nimport { Object3D } from '../core/Object3D.js';\nimport { Triangle } from '../math/Triangle.js';\nimport { DoubleSide, BackSide } from '../constants.js';\nimport { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';\nimport { BufferGeometry } from '../core/BufferGeometry.js';\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\nconst _tempC = /*@__PURE__*/ new Vector3();\n\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _morphC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv2 = geometry.attributes.uv2;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA.fromBufferAttribute( position, a );\n\t_vB.fromBufferAttribute( position, b );\n\t_vC.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA.add( _morphA );\n\t\t_vB.add( _morphB );\n\t\t_vC.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh ) {\n\n\t\tobject.boneTransform( a, _vA );\n\t\tobject.boneTransform( b, _vB );\n\t\tobject.boneTransform( c, _vC );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv, a );\n\t\t\t_uvB.fromBufferAttribute( uv, b );\n\t\t\t_uvC.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv2, a );\n\t\t\t_uvB.fromBufferAttribute( uv2, b );\n\t\t\t_uvC.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nexport { Mesh };\n","export default /* glsl */`\n#ifdef USE_ALPHAMAP\n\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n\n#endif\n`;\n","import { createElementNS } from '../utils.js';\nimport { SRGBToLinear } from '../math/Color.js';\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nexport { ImageUtils };\n","import alphamap_fragment from './ShaderChunk/alphamap_fragment.glsl.js';\nimport alphamap_pars_fragment from './ShaderChunk/alphamap_pars_fragment.glsl.js';\nimport alphatest_fragment from './ShaderChunk/alphatest_fragment.glsl.js';\nimport alphatest_pars_fragment from './ShaderChunk/alphatest_pars_fragment.glsl.js';\nimport aomap_fragment from './ShaderChunk/aomap_fragment.glsl.js';\nimport aomap_pars_fragment from './ShaderChunk/aomap_pars_fragment.glsl.js';\nimport begin_vertex from './ShaderChunk/begin_vertex.glsl.js';\nimport beginnormal_vertex from './ShaderChunk/beginnormal_vertex.glsl.js';\nimport bsdfs from './ShaderChunk/bsdfs.glsl.js';\nimport iridescence_fragment from './ShaderChunk/iridescence_fragment.glsl.js';\nimport bumpmap_pars_fragment from './ShaderChunk/bumpmap_pars_fragment.glsl.js';\nimport clipping_planes_fragment from './ShaderChunk/clipping_planes_fragment.glsl.js';\nimport clipping_planes_pars_fragment from './ShaderChunk/clipping_planes_pars_fragment.glsl.js';\nimport clipping_planes_pars_vertex from './ShaderChunk/clipping_planes_pars_vertex.glsl.js';\nimport clipping_planes_vertex from './ShaderChunk/clipping_planes_vertex.glsl.js';\nimport color_fragment from './ShaderChunk/color_fragment.glsl.js';\nimport color_pars_fragment from './ShaderChunk/color_pars_fragment.glsl.js';\nimport color_pars_vertex from './ShaderChunk/color_pars_vertex.glsl.js';\nimport color_vertex from './ShaderChunk/color_vertex.glsl.js';\nimport common from './ShaderChunk/common.glsl.js';\nimport cube_uv_reflection_fragment from './ShaderChunk/cube_uv_reflection_fragment.glsl.js';\nimport defaultnormal_vertex from './ShaderChunk/defaultnormal_vertex.glsl.js';\nimport displacementmap_pars_vertex from './ShaderChunk/displacementmap_pars_vertex.glsl.js';\nimport displacementmap_vertex from './ShaderChunk/displacementmap_vertex.glsl.js';\nimport emissivemap_fragment from './ShaderChunk/emissivemap_fragment.glsl.js';\nimport emissivemap_pars_fragment from './ShaderChunk/emissivemap_pars_fragment.glsl.js';\nimport encodings_fragment from './ShaderChunk/encodings_fragment.glsl.js';\nimport encodings_pars_fragment from './ShaderChunk/encodings_pars_fragment.glsl.js';\nimport envmap_fragment from './ShaderChunk/envmap_fragment.glsl.js';\nimport envmap_common_pars_fragment from './ShaderChunk/envmap_common_pars_fragment.glsl.js';\nimport envmap_pars_fragment from './ShaderChunk/envmap_pars_fragment.glsl.js';\nimport envmap_pars_vertex from './ShaderChunk/envmap_pars_vertex.glsl.js';\nimport envmap_vertex from './ShaderChunk/envmap_vertex.glsl.js';\nimport fog_vertex from './ShaderChunk/fog_vertex.glsl.js';\nimport fog_pars_vertex from './ShaderChunk/fog_pars_vertex.glsl.js';\nimport fog_fragment from './ShaderChunk/fog_fragment.glsl.js';\nimport fog_pars_fragment from './ShaderChunk/fog_pars_fragment.glsl.js';\nimport gradientmap_pars_fragment from './ShaderChunk/gradientmap_pars_fragment.glsl.js';\nimport lightmap_fragment from './ShaderChunk/lightmap_fragment.glsl.js';\nimport lightmap_pars_fragment from './ShaderChunk/lightmap_pars_fragment.glsl.js';\nimport lights_lambert_fragment from './ShaderChunk/lights_lambert_fragment.glsl.js';\nimport lights_lambert_pars_fragment from './ShaderChunk/lights_lambert_pars_fragment.glsl.js';\nimport lights_pars_begin from './ShaderChunk/lights_pars_begin.glsl.js';\nimport envmap_physical_pars_fragment from './ShaderChunk/envmap_physical_pars_fragment.glsl.js';\nimport lights_toon_fragment from './ShaderChunk/lights_toon_fragment.glsl.js';\nimport lights_toon_pars_fragment from './ShaderChunk/lights_toon_pars_fragment.glsl.js';\nimport lights_phong_fragment from './ShaderChunk/lights_phong_fragment.glsl.js';\nimport lights_phong_pars_fragment from './ShaderChunk/lights_phong_pars_fragment.glsl.js';\nimport lights_physical_fragment from './ShaderChunk/lights_physical_fragment.glsl.js';\nimport lights_physical_pars_fragment from './ShaderChunk/lights_physical_pars_fragment.glsl.js';\nimport lights_fragment_begin from './ShaderChunk/lights_fragment_begin.glsl.js';\nimport lights_fragment_maps from './ShaderChunk/lights_fragment_maps.glsl.js';\nimport lights_fragment_end from './ShaderChunk/lights_fragment_end.glsl.js';\nimport logdepthbuf_fragment from './ShaderChunk/logdepthbuf_fragment.glsl.js';\nimport logdepthbuf_pars_fragment from './ShaderChunk/logdepthbuf_pars_fragment.glsl.js';\nimport logdepthbuf_pars_vertex from './ShaderChunk/logdepthbuf_pars_vertex.glsl.js';\nimport logdepthbuf_vertex from './ShaderChunk/logdepthbuf_vertex.glsl.js';\nimport map_fragment from './ShaderChunk/map_fragment.glsl.js';\nimport map_pars_fragment from './ShaderChunk/map_pars_fragment.glsl.js';\nimport map_particle_fragment from './ShaderChunk/map_particle_fragment.glsl.js';\nimport map_particle_pars_fragment from './ShaderChunk/map_particle_pars_fragment.glsl.js';\nimport metalnessmap_fragment from './ShaderChunk/metalnessmap_fragment.glsl.js';\nimport metalnessmap_pars_fragment from './ShaderChunk/metalnessmap_pars_fragment.glsl.js';\nimport morphcolor_vertex from './ShaderChunk/morphcolor_vertex.glsl.js';\nimport morphnormal_vertex from './ShaderChunk/morphnormal_vertex.glsl.js';\nimport morphtarget_pars_vertex from './ShaderChunk/morphtarget_pars_vertex.glsl.js';\nimport morphtarget_vertex from './ShaderChunk/morphtarget_vertex.glsl.js';\nimport normal_fragment_begin from './ShaderChunk/normal_fragment_begin.glsl.js';\nimport normal_fragment_maps from './ShaderChunk/normal_fragment_maps.glsl.js';\nimport normal_pars_fragment from './ShaderChunk/normal_pars_fragment.glsl.js';\nimport normal_pars_vertex from './ShaderChunk/normal_pars_vertex.glsl.js';\nimport normal_vertex from './ShaderChunk/normal_vertex.glsl.js';\nimport normalmap_pars_fragment from './ShaderChunk/normalmap_pars_fragment.glsl.js';\nimport clearcoat_normal_fragment_begin from './ShaderChunk/clearcoat_normal_fragment_begin.glsl.js';\nimport clearcoat_normal_fragment_maps from './ShaderChunk/clearcoat_normal_fragment_maps.glsl.js';\nimport clearcoat_pars_fragment from './ShaderChunk/clearcoat_pars_fragment.glsl.js';\nimport iridescence_pars_fragment from './ShaderChunk/iridescence_pars_fragment.glsl.js';\nimport output_fragment from './ShaderChunk/output_fragment.glsl.js';\nimport packing from './ShaderChunk/packing.glsl.js';\nimport premultiplied_alpha_fragment from './ShaderChunk/premultiplied_alpha_fragment.glsl.js';\nimport project_vertex from './ShaderChunk/project_vertex.glsl.js';\nimport dithering_fragment from './ShaderChunk/dithering_fragment.glsl.js';\nimport dithering_pars_fragment from './ShaderChunk/dithering_pars_fragment.glsl.js';\nimport roughnessmap_fragment from './ShaderChunk/roughnessmap_fragment.glsl.js';\nimport roughnessmap_pars_fragment from './ShaderChunk/roughnessmap_pars_fragment.glsl.js';\nimport shadowmap_pars_fragment from './ShaderChunk/shadowmap_pars_fragment.glsl.js';\nimport shadowmap_pars_vertex from './ShaderChunk/shadowmap_pars_vertex.glsl.js';\nimport shadowmap_vertex from './ShaderChunk/shadowmap_vertex.glsl.js';\nimport shadowmask_pars_fragment from './ShaderChunk/shadowmask_pars_fragment.glsl.js';\nimport skinbase_vertex from './ShaderChunk/skinbase_vertex.glsl.js';\nimport skinning_pars_vertex from './ShaderChunk/skinning_pars_vertex.glsl.js';\nimport skinning_vertex from './ShaderChunk/skinning_vertex.glsl.js';\nimport skinnormal_vertex from './ShaderChunk/skinnormal_vertex.glsl.js';\nimport specularmap_fragment from './ShaderChunk/specularmap_fragment.glsl.js';\nimport specularmap_pars_fragment from './ShaderChunk/specularmap_pars_fragment.glsl.js';\nimport tonemapping_fragment from './ShaderChunk/tonemapping_fragment.glsl.js';\nimport tonemapping_pars_fragment from './ShaderChunk/tonemapping_pars_fragment.glsl.js';\nimport transmission_fragment from './ShaderChunk/transmission_fragment.glsl.js';\nimport transmission_pars_fragment from './ShaderChunk/transmission_pars_fragment.glsl.js';\nimport uv_pars_fragment from './ShaderChunk/uv_pars_fragment.glsl.js';\nimport uv_pars_vertex from './ShaderChunk/uv_pars_vertex.glsl.js';\nimport uv_vertex from './ShaderChunk/uv_vertex.glsl.js';\nimport uv2_pars_fragment from './ShaderChunk/uv2_pars_fragment.glsl.js';\nimport uv2_pars_vertex from './ShaderChunk/uv2_pars_vertex.glsl.js';\nimport uv2_vertex from './ShaderChunk/uv2_vertex.glsl.js';\nimport worldpos_vertex from './ShaderChunk/worldpos_vertex.glsl.js';\n\nimport * as background from './ShaderLib/background.glsl.js';\nimport * as backgroundCube from './ShaderLib/backgroundCube.glsl.js';\nimport * as cube from './ShaderLib/cube.glsl.js';\nimport * as depth from './ShaderLib/depth.glsl.js';\nimport * as distanceRGBA from './ShaderLib/distanceRGBA.glsl.js';\nimport * as equirect from './ShaderLib/equirect.glsl.js';\nimport * as linedashed from './ShaderLib/linedashed.glsl.js';\nimport * as meshbasic from './ShaderLib/meshbasic.glsl.js';\nimport * as meshlambert from './ShaderLib/meshlambert.glsl.js';\nimport * as meshmatcap from './ShaderLib/meshmatcap.glsl.js';\nimport * as meshnormal from './ShaderLib/meshnormal.glsl.js';\nimport * as meshphong from './ShaderLib/meshphong.glsl.js';\nimport * as meshphysical from './ShaderLib/meshphysical.glsl.js';\nimport * as meshtoon from './ShaderLib/meshtoon.glsl.js';\nimport * as points from './ShaderLib/points.glsl.js';\nimport * as shadow from './ShaderLib/shadow.glsl.js';\nimport * as sprite from './ShaderLib/sprite.glsl.js';\n\nexport const ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tiridescence_fragment: iridescence_fragment,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_fragment: lights_lambert_fragment,\n\tlights_lambert_pars_fragment: lights_lambert_pars_fragment,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphcolor_vertex: morphcolor_vertex,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tiridescence_pars_fragment: iridescence_pars_fragment,\n\toutput_fragment: output_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: background.vertex,\n\tbackground_frag: background.fragment,\n\tbackgroundCube_vert: backgroundCube.vertex,\n\tbackgroundCube_frag: backgroundCube.fragment,\n\tcube_vert: cube.vertex,\n\tcube_frag: cube.fragment,\n\tdepth_vert: depth.vertex,\n\tdepth_frag: depth.fragment,\n\tdistanceRGBA_vert: distanceRGBA.vertex,\n\tdistanceRGBA_frag: distanceRGBA.fragment,\n\tequirect_vert: equirect.vertex,\n\tequirect_frag: equirect.fragment,\n\tlinedashed_vert: linedashed.vertex,\n\tlinedashed_frag: linedashed.fragment,\n\tmeshbasic_vert: meshbasic.vertex,\n\tmeshbasic_frag: meshbasic.fragment,\n\tmeshlambert_vert: meshlambert.vertex,\n\tmeshlambert_frag: meshlambert.fragment,\n\tmeshmatcap_vert: meshmatcap.vertex,\n\tmeshmatcap_frag: meshmatcap.fragment,\n\tmeshnormal_vert: meshnormal.vertex,\n\tmeshnormal_frag: meshnormal.fragment,\n\tmeshphong_vert: meshphong.vertex,\n\tmeshphong_frag: meshphong.fragment,\n\tmeshphysical_vert: meshphysical.vertex,\n\tmeshphysical_frag: meshphysical.fragment,\n\tmeshtoon_vert: meshtoon.vertex,\n\tmeshtoon_frag: meshtoon.fragment,\n\tpoints_vert: points.vertex,\n\tpoints_frag: points.fragment,\n\tshadow_vert: shadow.vertex,\n\tshadow_frag: shadow.fragment,\n\tsprite_vert: sprite.vertex,\n\tsprite_frag: sprite.fragment\n};\n","export const vertex = /* glsl */`\nvarying vec2 vUv;\nuniform mat3 uvTransform;\n\nvoid main() {\n\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform sampler2D t2D;\n\nvarying vec2 vUv;\n\nvoid main() {\n\n\tgl_FragColor = texture2D( t2D, vUv );\n\n\t#ifdef DECODE_VIDEO_TEXTURE\n\n\t\t// inline sRGB decode (TODO: Remove this code when https://crbug.com/1256340 is solved)\n\n\t\tgl_FragColor = vec4( mix( pow( gl_FragColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), gl_FragColor.rgb * 0.0773993808, vec3( lessThanEqual( gl_FragColor.rgb, vec3( 0.04045 ) ) ) ), gl_FragColor.w );\n\n\t#endif\n\n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t#include \n\t#include \n\n\tgl_Position.z = gl_Position.w; // set z to camera.far\n\n}\n`;\n\nexport const fragment = /* glsl */`\n\n#ifdef ENVMAP_TYPE_CUBE\n\n\tuniform samplerCube envMap;\n\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\n\tuniform sampler2D envMap;\n\n#endif\n\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\n\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\n\n\t#else\n\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t#endif\n\n\tgl_FragColor = texColor;\n\n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t#include \n\t#include \n\n\tgl_Position.z = gl_Position.w; // set z to camera.far\n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\n\nvarying vec3 vWorldDirection;\n\nvoid main() {\n\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include \n\n\t#include \n\n\t#ifdef USE_DISPLACEMENTMAP\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvHighPrecisionZW = gl_Position.zw;\n\n}\n`;\n\nexport const fragment = /* glsl */`\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\n\t#include \n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n`;\n","export const vertex = /* glsl */`\n#define DISTANCE\n\nvarying vec3 vWorldPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\t#include \n\n\t#ifdef USE_DISPLACEMENTMAP\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvWorldPosition = worldPosition.xyz;\n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define DISTANCE\n\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main () {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#include \n\t#include \n\t#include \n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n`;\n","export const vertex = /* glsl */`\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform sampler2D tEquirect;\n\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvec3 direction = normalize( vWorldDirection );\n\n\tvec2 sampleUV = equirectUv( direction );\n\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\nuniform float scale;\nattribute float lineDistance;\n\nvarying float vLineDistance;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\tvLineDistance = scale * lineDistance;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform vec3 diffuse;\nuniform float opacity;\n\nuniform float dashSize;\nuniform float totalSize;\n\nvarying float vLineDistance;\n\n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\n\t\tdiscard;\n\n\t}\n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\n\toutgoingLight = diffuseColor.rgb; // simple shader\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform vec3 diffuse;\nuniform float opacity;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\n\t// accumulation (baked indirect lighting only)\n\t#ifdef USE_LIGHTMAP\n\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\n\t#else\n\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\n\t#endif\n\n\t// modulation\n\t#include \n\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#define LAMBERT\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define LAMBERT\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#define MATCAP\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define MATCAP\n\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\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; // 0.495 to remove artifacts caused by undersized matcap disks\n\n\t#ifdef USE_MATCAP\n\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\n\t#else\n\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); // default if matcap is missing\n\n\t#endif\n\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#define NORMAL\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvViewPosition = - mvPosition.xyz;\n\n#endif\n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define NORMAL\n\nuniform float opacity;\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\n\t#ifdef OPAQUE\n\n\t\tgl_FragColor.a = 1.0;\n\n\t#endif\n\n}\n`;\n","export const vertex = /* glsl */`\n#define PHONG\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define PHONG\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#define STANDARD\n\nvarying vec3 vViewPosition;\n\n#ifdef USE_TRANSMISSION\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\n#ifdef USE_TRANSMISSION\n\n\tvWorldPosition = worldPosition.xyz;\n\n#endif\n}\n`;\n\nexport const fragment = /* glsl */`\n#define STANDARD\n\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n\n#ifdef IOR\n\tuniform float ior;\n#endif\n\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\n\t#include \n\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\n\t#ifdef USE_SHEEN\n\n\t\t// Sheen energy compensation approximation calculation can be found at the end of\n\t\t// https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\n\t#endif\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#define TOON\n\nvarying vec3 vViewPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\n#define TOON\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\nuniform float size;\nuniform float scale;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tgl_PointSize = size;\n\n\t#ifdef USE_SIZEATTENUATION\n\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform vec3 diffuse;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\toutgoingLight = diffuseColor.rgb;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform vec3 color;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\n\t#include \n\t#include \n\t#include \n\n}\n`;\n","export const vertex = /* glsl */`\nuniform float rotation;\nuniform vec2 center;\n\n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\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\n\t#ifndef USE_SIZEATTENUATION\n\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\n\t#endif\n\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\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\n\tmvPosition.xy += rotatedPosition;\n\n\tgl_Position = projectionMatrix * mvPosition;\n\n\t#include \n\t#include \n\t#include \n\n}\n`;\n\nexport const fragment = /* glsl */`\nuniform vec3 diffuse;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\toutgoingLight = diffuseColor.rgb;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n`;\n","import { Color } from '../../math/Color.js';\nimport { Vector2 } from '../../math/Vector2.js';\nimport { Matrix3 } from '../../math/Matrix3.js';\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tuv2Transform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // physical\n\t\trefractionRatio: { value: 0.98 }, // basic, lambert, phong\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotLightMap: { value: [] },\n\t\tspotShadowMap: { value: [] },\n\t\tspotLightMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t}\n\n};\n\nexport { UniformsLib };\n","import { ShaderChunk } from './ShaderChunk.js';\nimport { mergeUniforms } from './UniformsUtils.js';\nimport { Vector2 } from '../../math/Vector2.js';\nimport { Vector3 } from '../../math/Vector3.js';\nimport { UniformsLib } from './UniformsLib.js';\nimport { Color } from '../../math/Color.js';\nimport { Matrix3 } from '../../math/Matrix3.js';\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: /*@__PURE__*/ new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\n\tbackgroundCube: {\n\n\t\tuniforms: {\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\tbackgroundBlurriness: { value: 0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.backgroundCube_vert,\n\t\tfragmentShader: ShaderChunk.backgroundCube_frag\n\n\t},\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: /*@__PURE__*/ new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: /*@__PURE__*/ new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tiridescence: { value: 0 },\n\t\t\tiridescenceMap: { value: null },\n\t\t\tiridescenceIOR: { value: 1.3 },\n\t\t\tiridescenceThicknessMinimum: { value: 100 },\n\t\t\tiridescenceThicknessMaximum: { value: 400 },\n\t\t\tiridescenceThicknessMap: { value: null },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenRoughness: { value: 1 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tspecularIntensity: { value: 1 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\n\nexport { ShaderLib };\n","import { BackSide, FrontSide, CubeUVReflectionMapping } from '../../constants.js';\nimport { BoxGeometry } from '../../geometries/BoxGeometry.js';\nimport { PlaneGeometry } from '../../geometries/PlaneGeometry.js';\nimport { ShaderMaterial } from '../../materials/ShaderMaterial.js';\nimport { Color } from '../../math/Color.js';\nimport { Mesh } from '../../objects/Mesh.js';\nimport { ShaderLib } from '../shaders/ShaderLib.js';\nimport { cloneUniforms } from '../shaders/UniformsUtils.js';\n\nfunction WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = alpha === true ? 0 : 1;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene ) {\n\n\t\tlet forceClear = false;\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tconst usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background\n\t\t\tbackground = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );\n\n\t\t}\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.backgroundCube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.backgroundCube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// add \"envMap\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;\n\t\t\tboxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tboxMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// add \"map\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tplaneMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\n\nexport { WebGLBackground };\n","import { ImageUtils } from '../extras/ImageUtils.js';\nimport * as MathUtils from '../math/MathUtils.js';\n\nclass Source {\n\n\tconstructor( data = null ) {\n\n\t\tthis.isSource = true;\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.data = data;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nexport { Source };\n","import { EventDispatcher } from '../core/EventDispatcher.js';\nimport {\n\tMirroredRepeatWrapping,\n\tClampToEdgeWrapping,\n\tRepeatWrapping,\n\tLinearEncoding,\n\tUnsignedByteType,\n\tRGBAFormat,\n\tLinearMipmapLinearFilter,\n\tLinearFilter,\n\tUVMapping\n} from '../constants.js';\nimport * as MathUtils from '../math/MathUtils.js';\nimport { Vector2 } from '../math/Vector2.js';\nimport { Matrix3 } from '../math/Matrix3.js';\nimport { Source } from './Source.js';\n\nlet textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\t\tsuper();\n\n\t\tthis.isTexture = true;\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.source = new Source( image );\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n\t\tthis.needsPMREMUpdate = false; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n\n\t}\n\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = null;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nexport { Texture };\n","import { Texture } from './Texture.js';\nimport { ClampToEdgeWrapping, NearestFilter } from '../constants.js';\n\nclass DataArrayTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.isDataArrayTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nexport { DataArrayTexture };\n","class Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tVector4.prototype.isVector4 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\nexport { Vector4 };\n","import { FloatType } from '../../constants.js';\nimport { DataArrayTexture } from '../../textures/DataArrayTexture.js';\nimport { Vector4 } from '../../math/Vector4.js';\nimport { Vector2 } from '../../math/Vector2.js';\n\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\n}\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector4();\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tif ( capabilities.isWebGL2 === true ) {\n\n\t\t\t// instead of using attributes, the WebGL 2 code path encodes morph targets\n\t\t\t// into an array of data textures. Each layer represents a single morph target.\n\n\t\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\t\tlet entry = morphTextures.get( geometry );\n\n\t\t\tif ( entry === undefined || entry.count !== morphTargetsCount ) {\n\n\t\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\t\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\t\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\t\t\t\tconst hasMorphColors = geometry.morphAttributes.color !== undefined;\n\n\t\t\t\tconst morphTargets = geometry.morphAttributes.position || [];\n\t\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\t\t\t\tconst morphColors = geometry.morphAttributes.color || [];\n\n\t\t\t\tlet vertexDataCount = 0;\n\n\t\t\t\tif ( hasMorphPosition === true ) vertexDataCount = 1;\n\t\t\t\tif ( hasMorphNormals === true ) vertexDataCount = 2;\n\t\t\t\tif ( hasMorphColors === true ) vertexDataCount = 3;\n\n\t\t\t\tlet width = geometry.attributes.position.count * vertexDataCount;\n\t\t\t\tlet height = 1;\n\n\t\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t\t}\n\n\t\t\t\tconst buffer = new Float32Array( width * height * 4 * morphTargetsCount );\n\n\t\t\t\tconst texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );\n\t\t\t\ttexture.type = FloatType;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t// fill buffer\n\n\t\t\t\tconst vertexDataStride = vertexDataCount * 4;\n\n\t\t\t\tfor ( let i = 0; i < morphTargetsCount; i ++ ) {\n\n\t\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\t\tconst morphNormal = morphNormals[ i ];\n\t\t\t\t\tconst morphColor = morphColors[ i ];\n\n\t\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasMorphColors === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphColor, j );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 8 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 9 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 10 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tentry = {\n\t\t\t\t\tcount: morphTargetsCount,\n\t\t\t\t\ttexture: texture,\n\t\t\t\t\tsize: new Vector2( width, height )\n\t\t\t\t};\n\n\t\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\t\tfunction disposeTexture() {\n\n\t\t\t\t\ttexture.dispose();\n\n\t\t\t\t\tmorphTextures.delete( geometry );\n\n\t\t\t\t\tgeometry.removeEventListener( 'dispose', disposeTexture );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addEventListener( 'dispose', disposeTexture );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\n\t\t} else {\n\n\t\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\t\tlet influences = influencesList[ geometry.id ];\n\n\t\t\tif ( influences === undefined || influences.length !== length ) {\n\n\t\t\t\t// initialise list\n\n\t\t\t\tinfluences = [];\n\n\t\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t\t}\n\n\t\t\t// Collect influences\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tconst influence = influences[ i ];\n\n\t\t\t\tinfluence[ 0 ] = i;\n\t\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tinfluences.sort( absNumericalSort );\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tworkInfluences.sort( numericalSort );\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\t\t\tconst morphNormals = geometry.morphAttributes.normal;\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tconst influence = workInfluences[ i ];\n\t\t\t\tconst index = influence[ 0 ];\n\t\t\t\tconst value = influence[ 1 ];\n\n\t\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\n\nexport { WebGLMorphtargets };\n","import { Color } from '../../math/Color.js';\nimport { Matrix4 } from '../../math/Matrix4.js';\nimport { Vector2 } from '../../math/Vector2.js';\nimport { Vector3 } from '../../math/Vector3.js';\nimport { UniformsLib } from '../shaders/UniformsLib.js';\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingAndTexturingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions, capabilities ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1,\n\t\t\tnumSpotMaps: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotLightMap: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotLightMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: [],\n\t\tnumSpotLightShadowsWithMaps: 0\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights, physicallyCorrectLights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\t\tlet numSpotMaps = 0;\n\t\tlet numSpotShadowsWithMaps = 0;\n\n\t\t// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]\n\t\tlights.sort( shadowCastingAndTexturingLightsFirst );\n\n\t\t// artist-friendly light intensity scaling factor\n\t\tconst scaleFactor = ( physicallyCorrectLights !== true ) ? Math.PI : 1;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity * scaleFactor;\n\t\t\t\tg += color.g * intensity * scaleFactor;\n\t\t\t\tb += color.b * intensity * scaleFactor;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity * scaleFactor );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\tif ( light.map ) {\n\n\t\t\t\t\tstate.spotLightMap[ numSpotMaps ] = light.map;\n\t\t\t\t\tnumSpotMaps ++;\n\n\t\t\t\t\t// make sure the lightMatrix is up to date\n\t\t\t\t\t// TODO : do it if required only\n\t\t\t\t\tshadow.updateMatrices( light );\n\n\t\t\t\t\tif ( light.castShadow ) numSpotShadowsWithMaps ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotLightMatrix[ spotLength ] = shadow.matrix;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity * scaleFactor );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity * scaleFactor );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ||\n\t\t\thash.numSpotMaps !== numSpotMaps ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;\n\t\t\tstate.spotLightMap.length = numSpotMaps;\n\t\t\tstate.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\t\t\thash.numSpotMaps = numSpotMaps;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\n\nexport { WebGLLights };\n","import { WebGLLights } from './WebGLLights.js';\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( physicallyCorrectLights ) {\n\n\t\tlights.setup( lightsArray, physicallyCorrectLights );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tconst renderStateArray = renderStates.get( scene );\n\t\tlet renderState;\n\n\t\tif ( renderStateArray === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStateArray.length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStateArray.push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStateArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n\nexport { WebGLRenderStates };\n","import { BackSide } from '../../constants.js';\n\nfunction WebGLMaterials( renderer, properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value.copy( fog.color );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\n\t\t\t// artist-friendly light intensity scaling factor\n\t\t\tconst scaleFactor = ( renderer.physicallyCorrectLights !== true ) ? Math.PI : 1;\n\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap map\n\t\t// 13. iridescence map\n\t\t// 14. iridescence thickness map\n\t\t// 15. specular intensity map\n\t\t// 16. specular tint map\n\t\t// 17. transmission map\n\t\t// 18. thickness map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\n\t\t} else if ( material.iridescenceMap ) {\n\n\t\t\tuvScaleMap = material.iridescenceMap;\n\n\t\t} else if ( material.iridescenceThicknessMap ) {\n\n\t\t\tuvScaleMap = material.iridescenceThicknessMap;\n\n\t\t} else if ( material.specularIntensityMap ) {\n\n\t\t\tuvScaleMap = material.specularIntensityMap;\n\n\t\t} else if ( material.specularColorMap ) {\n\n\t\t\tuvScaleMap = material.specularColorMap;\n\n\t\t} else if ( material.transmissionMap ) {\n\n\t\t\tuvScaleMap = material.transmissionMap;\n\n\t\t} else if ( material.thicknessMap ) {\n\n\t\t\tuvScaleMap = material.thicknessMap;\n\n\t\t} else if ( material.sheenColorMap ) {\n\n\t\t\tuvScaleMap = material.sheenColorMap;\n\n\t\t} else if ( material.sheenRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.sheenRoughnessMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t\tif ( material.sheenColorMap ) {\n\n\t\t\t\tuniforms.sheenColorMap.value = material.sheenColorMap;\n\n\t\t\t}\n\n\t\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\t\tuniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.iridescence > 0 ) {\n\n\t\t\tuniforms.iridescence.value = material.iridescence;\n\t\t\tuniforms.iridescenceIOR.value = material.iridescenceIOR;\n\t\t\tuniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];\n\t\t\tuniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];\n\n\t\t\tif ( material.iridescenceMap ) {\n\n\t\t\t\tuniforms.iridescenceMap.value = material.iridescenceMap;\n\n\t\t\t}\n\n\t\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\t\tuniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularColor.value.copy( material.specularColor );\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t}\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tuniforms.specularColorMap.value = material.specularColorMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nexport { WebGLMaterials };\n","export default /* glsl */ `\n#if defined(BENDING) && BENDING == 1\nuniform float bendDistance;\nuniform float bendAmount;\n\n#if TAPERING == 0\nuniform mat4 invWorldToRestMatrix;\n#endif\n\n/*\nthe curve function returns a particular curve obtained by the composition of a \ngaussian function and a logistic function. the resulting shape is similar to a \nrayleigh distribution [https://en.wikipedia.org/wiki/Rayleigh_distribution] \nfunction but with more parameters to change its shape.\nit is used to deform the glasses with a half-drop like shape.\nto debug or modify this the advice is to go \nto a online graph calculator [https://www.desmos.com/calculator?lang=it]\ninput the two function, the parameters and \nchange them to obtain the desired modification. then apply here the correction.\n*/\n\nfloat gauss(float x, float m, float s) {\n float arg = -pow(x - m, 2.) / pow(2.*s, 2.);\n return exp(arg);\n}\n\nfloat logisticF(float x, float m)\n{\n float steepFactor = 100.0;\n float shift = 0.02;\n float arg = -steepFactor*(x-m + shift);\n return 1.-1./(1.+exp(arg));\n}\n\nfloat curve(float x, float peakX, float standDev)\n{\n return gauss(x, peakX, standDev) * logisticF(x, peakX);\n}\n#endif\n`;\n","export default /* glsl */`\n#if defined(BENDING) && BENDING == 1\nfloat z = restPos.z;\nrestPos.x += sign(restPos.x) * curve(z, bendDistance, 0.05) * bendAmount;\n\n// modify the vector position using the rest space position (calculated in the fading step)\n// transform that position back to world world and then for VP matrix\n// FIXME: cache the PVR^-1 matrix in CPU and pass it as a uniform\ngl_Position = projectionMatrix * viewMatrix * invWorldToRestMatrix * restPos;\n#endif\n`;\n","export default /* glsl */`\nuniform float flare;\nuniform float taper;\nuniform float sideInFront;\nuniform mat4 invWorldToRestMatrix;\n`;","export default /* glsl */`\n#if defined(TAPERING) && TAPERING == 1\n\n// if used scale is meters then unitScaleFactor = 0.001 otherwise 1.\n// if unitScaleFactor is 0.001 then we convert mm to m\nfloat taperRatio = 120.0* unitScaleFactor;\n// flare and transfromed must be defined in same unit scale\nfloat taperAmount = (-restPos.z - flare) / taperRatio;\n\n// modfiy vertex position in rest space\ntaperAmount = clamp(taperAmount, 0.0, 1.0);\ntaperAmount = taperAmount * taper;\nrestPos.x += sign(restPos.x) * taperAmount;\n\n// modify the vector position using the rest space position (calculated in the fading step)\n// transform that position back to world world and then for VP matrix\n// FIXME: cache the PVR^-1 matrix in CPU and pass it as a uniform\ngl_Position = projectionMatrix * viewMatrix * invWorldToRestMatrix * restPos;\n\n// We sheer the x values of the model to approximate the way the stems\n// bend to sit on the users ears.\n// Bend starts at the flare position (may differ from one frame to the next)\n// And ends at z = 120 mm with an added width of 2x taper ammount\n#endif\n`;\n","export default /* glsl */`\nfloat getTaperedPosition(float pos, float reference, float amount) {\n return pos + sign(reference) * amount;\n}\n`;\n","export default /* glsl */`\n// Block that defines Fading \n\n#if defined(FADE) && FADE == 1\n\n// enable fade boolean\nuniform bool enableFade;\n\n// z translation when the fading start (in rest space, that is the world space if the entire glasses is not roto-translated)\nuniform float fadePositionZ;\n\n// magic numbers scaling factor (that is millimeters to meters almost always)\nuniform float unitScaleFactor;\n\n// matrix that transforms vector position from world space to rest space\n// it is the inverse of the position set by the fitting algorithm\nuniform mat4 worldToRestMatrix;\n\n\nvarying float depth;\nvarying float tzdebug;\n#endif\n\nvec3 colorGrayMap(float t, float min, float max) {\n if(t < min)\n return vec3(1.0, 0.0, 0.0);\n if(t > max)\n return vec3(0.0, 0.0, 1.0);\n float v = (t - min) / (max - min);\n return vec3(v);\n}\n`;","export default /* glsl */`\n#if defined(FADE) && FADE == 1\n// if used scale is meters then unitScaleFactor = 0.001 otherwise 1.\n// if unitScaleFactor is 0.001 then we convert mm to m\nfloat fadeRatio = 20.0 * unitScaleFactor; // allow to use differente unit scale to compute fade\n\n// transform the local transformed vector position to world and then to rest space (inverting the root transform)\n// FIXME: cache the RM matrix in CPU and pass it as a uniform\nvec4 restPos = worldToRestMatrix * modelMatrix * vec4(transformed,1.0);\n\ndepth = clamp(1.0 - ((-restPos.z - fadePositionZ) / fadeRatio) /*Fade out for 20 mm*/, 0.0, 1.0);\n#endif\n`;","export default /* glsl */`\n#if defined(FADE) && FADE == 1\nfloat fade = 1.0;\nif(enableFade) {\n fade = min(1.0, depth);\n}\ngl_FragColor.a *= fade;\n// gl_FragColor = vec4(colorGrayMap(fade,0.,1.),fade);\n#endif\n`;","export default /* glsl */`\n// Block that defines Fading \n\n#if defined(FADE) && FADE == 1\n\n// enable fade boolean\nuniform bool enableFade;\nuniform int ditheringDistribution;\n\n// z translation when the fading start (in rest space, that is the world space if the entire glasses is not roto-translated)\nuniform float fadePositionZ;\n\n// magic numbers scaling factor (that is millimeters to meters almost always)\nuniform float unitScaleFactor;\n\n// matrix that transforms vector position from world space to rest space\n// it is the inverse of the position set by the fitting algorithm\nuniform mat4 worldToRestMatrix;\n\n\nvarying float depth;\nvarying float tzdebug;\n\nfloat bayerDither2x2( vec2 v )\n{\n return mod( 3.0 * v.y + 2.0 * v.x, 4.0 );\n}\n\nfloat bayerDither4x4( vec2 v )\n{\n vec2 P1 = mod( v, 2.0 );\n vec2 P2 = mod( floor( 0.5 * v ), 2.0 );\n return 4.0 * bayerDither2x2( P1 ) + bayerDither2x2( P2 );\n}\n\nfloat random (vec2 uv)\n{\n return fract(sin(dot(uv, vec2(12.9898,78.233)))*43758.5453123);\n}\n\n#endif\n\nvec3 colorGrayMap(float t, float min, float max) {\n if(t < min)\n return vec3(1.0, 0.0, 0.0);\n if(t > max)\n return vec3(0.0, 0.0, 1.0);\n float v = (t - min) / (max - min);\n return vec3(v);\n}\n`;","export default /* glsl */`\n#if defined(FADE) && FADE == 1\nif(enableFade && depth < 1.0) \n{\n// dithering bayern\n if(ditheringDistribution == 0 && ( bayerDither4x4( floor( mod( gl_FragCoord.xy, 4.0 ) ) ) ) / 16.0 >= depth ) discard;\n\n//dithering white noise\n if(ditheringDistribution == 1 && random(gl_FragCoord.xy) > depth ) discard;\n}\n#endif\n`;","import {\n REVISION,\n BackSide,\n DoubleSide,\n FrontSide,\n RGBAFormat,\n HalfFloatType,\n FloatType,\n UnsignedByteType,\n LinearEncoding,\n NoToneMapping,\n LinearMipmapLinearFilter,\n NearestMipmapLinearFilter,\n LinearFilter,\n LinearToneMapping\n} from 'three/src/constants.js';\nimport { Frustum } from 'three/src/math/Frustum.js';\nimport { Matrix4 } from 'three/src/math/Matrix4.js';\nimport { Vector2 } from 'three/src/math/Vector2.js';\nimport { Vector3 } from 'three/src/math/Vector3.js';\nimport { Vector4 } from 'three/src/math/Vector4.js';\nimport { floorPowerOfTwo } from 'three/src/math/MathUtils.js';\nimport { WebGLAnimation } from 'three/src/renderers/webgl/WebGLAnimation.js';\nimport { WebGLAttributes } from 'three/src/renderers/webgl/WebGLAttributes.js';\nimport { WebGLBackground } from 'three/src/renderers/webgl/WebGLBackground.js';\nimport { WebGLBindingStates } from 'three/src/renderers/webgl/WebGLBindingStates.js';\nimport { WebGLBufferRenderer } from 'three/src/renderers/webgl/WebGLBufferRenderer.js';\nimport { WebGLCapabilities } from 'three/src/renderers/webgl/WebGLCapabilities.js';\nimport { WebGLClipping } from 'three/src/renderers/webgl/WebGLClipping.js';\nimport { WebGLCubeMaps } from 'three/src/renderers/webgl/WebGLCubeMaps.js';\nimport { WebGLCubeUVMaps } from 'three/src/renderers/webgl/WebGLCubeUVMaps.js';\nimport { WebGLExtensions } from 'three/src/renderers/webgl/WebGLExtensions.js';\nimport { WebGLGeometries } from 'three/src/renderers/webgl/WebGLGeometries.js';\nimport { WebGLIndexedBufferRenderer } from 'three/src/renderers/webgl/WebGLIndexedBufferRenderer.js';\nimport { WebGLInfo } from 'three/src/renderers/webgl/WebGLInfo.js';\nimport { WebGLMorphtargets } from 'three/src/renderers/webgl/WebGLMorphtargets.js';\nimport { WebGLObjects } from 'three/src/renderers/webgl/WebGLObjects.js';\nimport { WebGLPrograms } from 'three/src/renderers/webgl/WebGLPrograms.js';\nimport { WebGLProperties } from 'three/src/renderers/webgl/WebGLProperties.js';\nimport { WebGLRenderLists } from 'three/src/renderers/webgl/WebGLRenderLists.js';\nimport { WebGLRenderStates } from 'three/src/renderers/webgl/WebGLRenderStates.js';\nimport { WebGLRenderTarget } from 'three/src/renderers/WebGLRenderTarget.js';\nimport { WebGLShadowMap } from 'three/src/renderers/webgl/WebGLShadowMap.js';\nimport { WebGLState } from 'three/src/renderers/webgl/WebGLState.js';\nimport { WebGLTextures } from 'three/src/renderers/webgl/WebGLTextures.js';\nimport { WebGLUniforms } from 'three/src/renderers/webgl/WebGLUniforms.js';\nimport { WebGLUtils } from 'three/src/renderers/webgl/WebGLUtils.js';\nimport { WebXRManager } from 'three/src/renderers/webxr/WebXRManager.js';\nimport { WebGLMaterials } from 'three/src/renderers/webgl/WebGLMaterials.js';\nimport { WebGLUniformsGroups } from 'three/src/renderers/webgl/WebGLUniformsGroups.js';\nimport { createElementNS } from 'three/src/utils.js';\n\n// VM\nimport { ShaderChunk } from 'three/src/renderers/shaders/ShaderChunk.js';\nimport bendingPars from './shaderChunks/bending.pars.glsl.js';\nimport bendingVertex from './shaderChunks/bending.vertex.glsl.js';\nimport taperingPars from './shaderChunks/tapering.pars.glsl.js';\nimport taperingVertex from './shaderChunks/tapering.vertex.glsl.js';\nimport taperingFunc from './shaderChunks/tapering.func.glsl';\nimport fadingPars from './shaderChunks/fade.pars.glsl.js';\nimport fadingVertex from './shaderChunks/fade.vertex.glsl.js';\nimport fadingFrag from './shaderChunks/fade.frag.glsl.js';\nimport fadingDitherPars from './shaderChunks/fadeDither.pars.glsl.js';\nimport fadingDitherFrag from './shaderChunks/fadeDither.frag.glsl';\n\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n canvas.style.display = 'block';\n return canvas;\n\n}\n\nfunction GlassesRTWebGLRenderer(parameters = {}) {\n\n\tthis.isWebGLRenderer = true;\n\n const _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n _context = parameters.context !== undefined ? parameters.context : null,\n\n _depth = parameters.depth !== undefined ? parameters.depth : true,\n _stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n _antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n _powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n _failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n let _alpha;\n\n this.lastRenderLists = undefined;\n\n if (_context !== null) {\n _alpha = _context.getContextAttributes().alpha;\n\n } else {\n\n _alpha = parameters.alpha !== undefined ? parameters.alpha : false;\n\n }\n\n let currentRenderList = null;\n let currentRenderState = null;\n\n // render() can be called from within a callback triggered by another render.\n // We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n const renderListStack = [];\n const renderStateStack = [];\n\n // public properties\n\n this.domElement = _canvas;\n\n // Debug configuration container\n this.debug = {\n\n /**\n * Enables error checking and reporting when shader programs are being compiled\n * @type {boolean}\n */\n checkShaderErrors: true\n };\n\n // clearing\n\n this.autoClear = true;\n this.autoClearColor = true;\n this.autoClearDepth = true;\n this.autoClearStencil = true;\n\n // scene graph\n\n this.sortObjects = true;\n\n this.useMultiLayerTransmission = true;\n this.transmissionMultiSampling = 2;\n this.transmissionTargetSizeDivider = 1;\n this.transmissionMinFilter = NearestMipmapLinearFilter;\n this.transmissionMagFilter = LinearFilter;\n\n // user-defined clipping\n\n this.clippingPlanes = [];\n this.localClippingEnabled = false;\n\n // physically based shading\n\n this.outputEncoding = LinearEncoding;\n\n // physical lights\n\n this.physicallyCorrectLights = false;\n\n // tone mapping\n\n this.toneMapping = NoToneMapping;\n this.toneMappingExposure = 1.0;\n\n\t//\n\n Object.defineProperties( this, {\n\n\t\t// @deprecated since r136, 0e21088102b4de7e0a0a33140620b7a3424b9e6d\n\n\t\tgammaFactor: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaFactor has been removed.' );\n\t\t\t\treturn 2;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaFactor has been removed.' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n // VM-CHANGES: add pipeline list\n this.srpList = [];\n ShaderChunk.bending_pars = bendingPars;\n ShaderChunk.bending_vertex = bendingVertex;\n ShaderChunk.tapering_pars = taperingPars;\n ShaderChunk.tapering_vertex = taperingVertex;\n ShaderChunk.tapering_func = taperingFunc;\n ShaderChunk.fading_pars = fadingPars;\n ShaderChunk.fading_vertex = fadingVertex;\n ShaderChunk.fading_frag = fadingFrag;\n ShaderChunk.fadingDither_pars = fadingDitherPars;\n ShaderChunk.fading_vertex = fadingVertex;\n ShaderChunk.fadingDither_frag = fadingDitherFrag;\n\n // internal properties\n\n const _this = this;\n\n let _isContextLost = false;\n\n // internal state cache\n\n let _currentActiveCubeFace = 0;\n let _currentActiveMipmapLevel = 0;\n let _currentRenderTarget = null;\n let _currentMaterialId = - 1;\n\n let _currentCamera = null;\n\n const _currentViewport = new Vector4();\n const _currentScissor = new Vector4();\n let _currentScissorTest = null;\n\n //\n\n let _width = _canvas.width;\n let _height = _canvas.height;\n\n let _pixelRatio = 1;\n let _opaqueSort = null;\n let _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n let _scissorTest = false;\n\n // frustum\n\n const _frustum = new Frustum();\n\n // clipping\n\n let _clippingEnabled = false;\n let _localClippingEnabled = false;\n\n // transmission\n\n let _transmissionRenderTarget = null;\n\n // camera matrices cache\n\n const _projScreenMatrix = new Matrix4();\n\n const _vector2 = new Vector2();\n const _vector3 = new Vector3();\n\n const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n function getTargetPixelRatio() {\n\n return _currentRenderTarget === null ? _pixelRatio : 1;\n\n }\n\n // initialize\n\n let _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n }\n\n return null;\n\n }\n\n try {\n\n const contextAttributes = {\n alpha: true,\n depth: _depth,\n stencil: _stencil,\n antialias: _antialias,\n premultipliedAlpha: _premultipliedAlpha,\n preserveDrawingBuffer: _preserveDrawingBuffer,\n powerPreference: _powerPreference,\n failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n };\n\n // OffscreenCanvas does not have setAttribute, see #22811\n\t\tif ( 'setAttribute' in _canvas ) _canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );\n\n // event listeners must be registered before WebGL context is created, see #12753\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t_canvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n contextNames.shift();\n\n }\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n } else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n }\n\n }\n\n }\n\n // Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n _gl.getShaderPrecisionFormat = function () {\n\n return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n };\n\n }\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n throw error;\n\n }\n\n let extensions, capabilities, state, info;\n let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\n let programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n let background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates, uniformsGroups;\n\n function initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\textensions.init( capabilities );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\n\t\tinfo = new WebGLInfo( _gl );\n properties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\tcubeuvmaps = new WebGLCubeUVMaps( _this );\n\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( _this, properties );\n renderLists = new WebGLRenderLists();\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, _premultipliedAlpha );\n\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\t\tuniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n info.programs = programCache.programs;\n\n _this.capabilities = capabilities;\n _this.extensions = extensions;\n _this.properties = properties;\n _this.renderLists = renderLists;\n _this.shadowMap = shadowMap;\n _this.state = state;\n _this.info = info;\n\n }\n\n initGLContext();\n\n // xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n this.xr = xr;\n\n // API\n\n this.getContext = function () {\n\n return _gl;\n\n };\n\n this.getContextAttributes = function () {\n\n return _gl.getContextAttributes();\n\n };\n\n this.forceContextLoss = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n };\n\n this.forceContextRestore = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n };\n\n this.getPixelRatio = function () {\n\n return _pixelRatio;\n\n };\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n _pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n };\n\n\tthis.getSize = function ( target ) {\n\n\t\treturn target.set( _width, _height );\n\n };\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( xr.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n return;\n\n }\n\n _width = width;\n _height = height;\n\n\t\t_canvas.width = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( height * _pixelRatio );\n\n\t\tif ( updateStyle !== false ) {\n\n _canvas.style.width = width + 'px';\n _canvas.style.height = height + 'px';\n\n }\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n };\n\n\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n };\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n _width = width;\n _height = height;\n\n _pixelRatio = pixelRatio;\n\n\t\t_canvas.width = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n };\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\treturn target.copy( _currentViewport );\n\n };\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n };\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n } else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n }\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n };\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n };\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n } else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n }\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n };\n\n this.getScissorTest = function () {\n\n return _scissorTest;\n\n };\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n };\n\n\tthis.setOpaqueSort = function ( method ) {\n\n _opaqueSort = method;\n\n };\n\n\tthis.setTransparentSort = function ( method ) {\n\n _transparentSort = method;\n\n };\n\n // Clearing\n\n\tthis.getClearColor = function ( target ) {\n\n\t\treturn target.copy( background.getClearColor() );\n\n };\n\n this.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n };\n\n this.getClearAlpha = function () {\n\n return background.getClearAlpha();\n\n };\n\n this.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n };\n\n\tthis.clear = function ( color = true, depth = true, stencil = true ) {\n\n let bits = 0;\n\n\t\tif ( color ) bits |= _gl.COLOR_BUFFER_BIT;\n\t\tif ( depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\tif ( stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t_gl.clear( bits );\n\n };\n\n this.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n };\n\n this.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n };\n\n this.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n };\n\n //\n\n this.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t_canvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n renderLists.dispose();\n renderStates.dispose();\n properties.dispose();\n cubemaps.dispose();\n cubeuvmaps.dispose();\n objects.dispose();\n bindingStates.dispose();\n\t\tuniformsGroups.dispose();\n programCache.dispose();\n\n xr.dispose();\n\n\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\tif ( _transmissionRenderTarget ) {\n\n _transmissionRenderTarget.dispose();\n _transmissionRenderTarget = null;\n\n }\n\n animation.stop();\n\n };\n\n // Events\n\n\tfunction onContextLost( event ) {\n\n event.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n _isContextLost = true;\n\n }\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n _isContextLost = false;\n\n const infoAutoReset = info.autoReset;\n const shadowMapEnabled = shadowMap.enabled;\n const shadowMapAutoUpdate = shadowMap.autoUpdate;\n const shadowMapNeedsUpdate = shadowMap.needsUpdate;\n const shadowMapType = shadowMap.type;\n\n initGLContext();\n\n info.autoReset = infoAutoReset;\n shadowMap.enabled = shadowMapEnabled;\n shadowMap.autoUpdate = shadowMapAutoUpdate;\n shadowMap.needsUpdate = shadowMapNeedsUpdate;\n shadowMap.type = shadowMapType;\n\n }\n\n\tfunction onContextCreationError( event ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n const material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n }\n\n // Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReferences( material );\n\n\t\tproperties.remove( material );\n\n }\n\n\n\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\tconst programs = properties.get( material ).programs;\n\n\t\tif ( programs !== undefined ) {\n\n\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t} );\n\n\t\t\tif ( material.isShaderMaterial ) {\n\n\t\t\t\tprogramCache.releaseShaderCache( material );\n\n }\n\n }\n\n }\n\n // Buffer rendering\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n //\n\n let index = geometry.index;\n const position = geometry.attributes.position;\n\n //\n\n\t\tif ( index === null ) {\n\n\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t} else if ( index.count === 0 ) {\n\n return;\n\n }\n\n //\n\n let rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n rangeFactor = 2;\n\n }\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n let attribute;\n let renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n renderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n }\n\n //\n\n\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n const rangeStart = geometry.drawRange.start * rangeFactor;\n const rangeCount = geometry.drawRange.count * rangeFactor;\n\n const groupStart = group !== null ? group.start * rangeFactor : 0;\n const groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tconst drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n //\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n } else {\n\n\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n }\n\n\t\t} else if ( object.isLine ) {\n\n let lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n } else {\n\n\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n }\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n }\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n } else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n }\n\n };\n\n // Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tfunction prepare( material, scene, object ) {\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentRenderState = renderStates.get( scene );\n currentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n }\n\n }\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( _this.physicallyCorrectLights );\n\n\t\tscene.traverse( function ( object ) {\n\n const material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tprepare( material2, scene, object );\n\n }\n\n } else {\n\n\t\t\t\t\tprepare( material, scene, object );\n\n }\n\n }\n\n\t\t} );\n\n renderStateStack.pop();\n currentRenderState = null;\n\n };\n\n // Animation Loop\n\n let onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n }\n\n function onXRSessionStart() {\n\n animation.stop();\n\n }\n\n function onXRSessionEnd() {\n\n animation.start();\n\n }\n\n const animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof self !== 'undefined' ) animation.setContext( self );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n onAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n };\n\n\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n // Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n return;\n\n }\n\n\t\tif ( _isContextLost === true ) return;\n\n // update scene graph\n\n\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n // update camera matrices and frustum\n\n\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n camera = xr.getCamera(); // use XR camera for rendering\n\n }\n\n //\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n currentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n _localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n currentRenderList.init();\n\n _this.lastRenderLists = currentRenderList;\n\n\t\trenderListStack.push( currentRenderList );\n\n\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n currentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n currentRenderList.sort(_opaqueSort, _transparentSort);\n }\n\n if (scene.useCustomOrdering) {\n scene.sort(currentRenderList);\n }\n\n //\n\n\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n const shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n //\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n //\n\n\t\tbackground.render( currentRenderList, scene );\n\n // render scene\n\n\t\tcurrentRenderState.setupLights( _this.physicallyCorrectLights );\n\n\t\tif ( camera.isArrayCamera ) {\n\n const cameras = camera.cameras;\n\n\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n }\n\n } else {\n\n\t\t\trenderScene( currentRenderList, scene, camera );\n\n }\n\n //\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n // resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n // Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n }\n\n //\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n // _gl.finish();\n\n bindingStates.resetDefaultState();\n _currentMaterialId = - 1;\n _currentCamera = null;\n\n renderStateStack.pop();\n\n\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n } else {\n\n currentRenderState = null;\n\n }\n\n renderListStack.pop();\n\n\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n } else {\n\n currentRenderList = null;\n\n }\n\n };\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n groupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n }\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n }\n\n\t\t\t\t\tconst geometry = objects.update( object );\n const material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n }\n\n }\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n // update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n object.skeleton.update();\n object.skeleton.frame = info.render.frame;\n\n }\n\n }\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n }\n\n\t\t\t\t\tconst geometry = objects.update( object );\n const material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n const groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );\n\n }\n\n }\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n }\n\n }\n\n }\n\n }\n\n const children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n }\n\n }\n\n\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n const opaqueObjects = currentRenderList.opaque;\n const transmissiveObjects = currentRenderList.transmissive;\n const transparentObjects = currentRenderList.transparent;\n\n\t\tcurrentRenderState.setupLightsView( camera );\n\n \n if (transmissiveObjects.length > 0) {\n renderTransmissionPass(opaqueObjects, scene, camera);\n }\n\n if (viewport) state.viewport(_currentViewport.copy(viewport));\n if (opaqueObjects.length > 0) renderObjects(opaqueObjects, scene, camera);\n\n if ( _this.useMultiLayerTransmission && currentRenderList.mLayerTransmissive) {\n\n //if (transmissiveObjects.length > 0 || (currentRenderList.includeTransparent && transparentObjects.length > 0)) {\n for (let i = 0; i < currentRenderList.mLayerTransmissive.length; i++) {\n renderObjects(currentRenderList.mLayerTransmissive[i], scene, camera);\n /*\n // now, render to transmission buffer ONLY if in the next layers there are transmissive objects \n // this info could be also saved to the json\n let renderToTransmissionBuffer = false;\n for (let j = i + 1; j < currentRenderList.mLayerTransmissive.length && !renderToTransmissionBuffer; j++) {\n for (let k = 0; k < currentRenderList.mLayerTransmissive[j].length && !renderToTransmissionBuffer; k++) {\n if (transmissiveObjects.includes(currentRenderList.mLayerTransmissive[j][k])) {\n renderToTransmissionBuffer = true;\n }\n }\n }*/\n if (transmissiveObjects.length > 0 && i < currentRenderList.mLayerTransmissive.length - 1) {\n renderTransmissionObjects(false, currentRenderList.mLayerTransmissive[i], scene, camera);\n }\n }\n //}\n } else { // standard three.js behavior\n if ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\t if ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n }\n \n // Ensure depth buffer writing is enabled so it can be cleared on next render\n\n state.buffers.depth.setTest(true);\n state.buffers.depth.setMask(true);\n state.buffers.color.setMask(true);\n\n state.setPolygonOffset(false);\n\n }\n\n\tfunction renderTransmissionPass( opaqueObjects, scene, camera ) {\n\n const isWebGL2 = capabilities.isWebGL2;\n\n\t\tif ( _transmissionRenderTarget === null ) {\n\n\t\t\t_transmissionRenderTarget = new WebGLRenderTarget( 1, 1, {\n generateMipmaps: true,\n type: extensions.has('EXT_color_buffer_half_float') ?\n HalfFloatType : UnsignedByteType,\n minFilter: _this.transmissionMinFilter,\n magFilter: _this.transmissionMagFilter,\n samples: isWebGL2 && _antialias === true ? _this.transmissionMultiSampling : 0\n });\n\n }\n\n\t\t_this.getDrawingBufferSize( _vector2 );\n\n if (isWebGL2) {\n _transmissionRenderTarget.setSize(\n Math.floor(_vector2.x / _this.transmissionTargetSizeDivider),\n Math.floor(_vector2.y / _this.transmissionTargetSizeDivider)\n );\n } else {\n _transmissionRenderTarget.setSize(\n floorPowerOfTwo(_vector2.x / _this.transmissionTargetSizeDivider),\n floorPowerOfTwo(_vector2.y / _this.transmissionTargetSizeDivider)\n );\n }\n\n renderTransmissionObjects(true, opaqueObjects, scene, camera);\n }\n\n // RR modification\n function renderTransmissionObjects(clear, objects, scene, camera) {\n const currentRenderTarget = _this.getRenderTarget();\n _this.setRenderTarget(_transmissionRenderTarget);\n if (clear) _this.clear();\n\n // Turn off the features which can affect the frag color for opaque objects pass.\n // Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n const currentToneMapping = _this.toneMapping;\n _this.toneMapping = NoToneMapping;\n\n renderObjects(objects, scene, camera);\n\n _this.toneMapping = currentToneMapping;\n\n\t\ttextures.updateMultisampleRenderTarget( _transmissionRenderTarget );\n\t\ttextures.updateRenderTargetMipmap( _transmissionRenderTarget );\n\n\t\t_this.setRenderTarget( currentRenderTarget );\n\n }\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n const object = renderItem.object;\n const geometry = renderItem.geometry;\n const material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n const group = renderItem.group;\n\n\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n }\n\n }\n }\n\n\n function renderObject(object, scene, camera, geometry, material, group) {\n object.onBeforeRender(_this, scene, camera, geometry, material, group);\n\n object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld);\n object.normalMatrix.getNormalMatrix(object.modelViewMatrix);\n\n material.onBeforeRender(_this, scene, camera, geometry, object, group);\n\n // VM-CHANGES: pipeline selection\n const srpList = _this.srpList;\n const srpListLength = srpList.length;\n let srpUsedFlag = false;\n for (let i = 0; i < srpListLength; i++) {\n const srp = srpList[i];\n if (srp.shouldRender(material, object)) {\n srp.render(camera, scene, geometry, material, object, group);\n srpUsedFlag = true;\n break;\n }\n }\n\n // VM-CHANGES: Check if some srp was executed\n if (srpUsedFlag) {\n object.onAfterRender(_this, scene, camera, geometry, material, group);\n return;\n }\n\n material.onBeforeRender(_this, scene, camera, geometry, object, group);\n\n if (material.transparent === true && material.side === DoubleSide) {\n material.side = BackSide;\n material.needsUpdate = true;\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n material.side = FrontSide;\n material.needsUpdate = true;\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n material.side = DoubleSide;\n\n } else {\n\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n }\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n }\n\n\tfunction getProgram( material, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n const lights = currentRenderState.state.lights;\n const shadowsArray = currentRenderState.state.shadowsArray;\n\n const lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n let programs = materialProperties.programs;\n\n // always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n materialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );\n\n\t\tif ( programs === undefined ) {\n\n // new material\n\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n programs = new Map();\n materialProperties.programs = programs;\n\n }\n\n\t\tlet program = programs.get( programCacheKey );\n\n\t\tif ( program !== undefined ) {\n\n // early out if program and light state is identical\n\n\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n return program;\n\n }\n\n } else {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBuild( object, parameters, _this );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\tprograms.set( programCacheKey, program );\n\n materialProperties.uniforms = parameters.uniforms;\n\n }\n\n const uniforms = materialProperties.uniforms;\n\n\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n uniforms.clippingPlanes = clipping.uniform;\n\n }\n\n\t\tupdateCommonMaterialProperties( material, parameters );\n\n // store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n materialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\n\n // wire up the material to this renderer's lighting state\n\n uniforms.ambientLightColor.value = lights.state.ambient;\n uniforms.lightProbe.value = lights.state.probe;\n uniforms.directionalLights.value = lights.state.directional;\n uniforms.directionalLightShadows.value = lights.state.directionalShadow;\n uniforms.spotLights.value = lights.state.spot;\n uniforms.spotLightShadows.value = lights.state.spotShadow;\n uniforms.rectAreaLights.value = lights.state.rectArea;\n uniforms.ltc_1.value = lights.state.rectAreaLTC1;\n uniforms.ltc_2.value = lights.state.rectAreaLTC2;\n uniforms.pointLights.value = lights.state.point;\n uniforms.pointLightShadows.value = lights.state.pointShadow;\n uniforms.hemisphereLights.value = lights.state.hemi;\n\n uniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n uniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotLightMatrix.value = lights.state.spotLightMatrix;\n\t\t\tuniforms.spotLightMap.value = lights.state.spotLightMap;\n uniforms.pointShadowMap.value = lights.state.pointShadowMap;\n uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n // TODO (abelnation): add area lights shadow info to uniforms\n\n }\n\n const progUniforms = program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n materialProperties.currentProgram = program;\n materialProperties.uniformsList = uniformsList;\n\n return program;\n\n }\n\n\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\tconst materialProperties = properties.get( material );\n\n materialProperties.outputEncoding = parameters.outputEncoding;\n materialProperties.instancing = parameters.instancing;\n materialProperties.skinning = parameters.skinning;\n materialProperties.morphTargets = parameters.morphTargets;\n materialProperties.morphNormals = parameters.morphNormals;\n materialProperties.morphColors = parameters.morphColors;\n materialProperties.morphTargetsCount = parameters.morphTargetsCount;\n materialProperties.numClippingPlanes = parameters.numClippingPlanes;\n materialProperties.numIntersection = parameters.numClipIntersection;\n materialProperties.vertexAlphas = parameters.vertexAlphas;\n materialProperties.vertexTangents = parameters.vertexTangents;\n materialProperties.toneMapping = parameters.toneMapping;\n\n }\n\n\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n textures.resetTextureUnits();\n\n const fog = scene.fog;\n const environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.encoding : LinearEncoding );\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\tconst vertexTangents = !! material.normalMap && !! geometry.attributes.tangent;\n\t\tconst morphTargets = !! geometry.morphAttributes.position;\n\t\tconst morphNormals = !! geometry.morphAttributes.normal;\n\t\tconst morphColors = !! geometry.morphAttributes.color;\n const toneMapping = material.toneMapped ? _this.toneMapping : NoToneMapping;\n\n const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tconst materialProperties = properties.get( material );\n const lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n const useCache =\n camera === _currentCamera &&\n material.id === _currentMaterialId;\n\n // we might want to call this function with some ClippingGroup\n // object instead of the material, once it becomes feasible\n // (#8465, #8379)\n\t\t\t\tclipping.setState( material, camera, useCache );\n\n }\n\n }\n\n //\n\n let needsProgramChange = false;\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( material.fog === true && materialProperties.fog !== fog ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphColors !== morphColors ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.toneMapping !== toneMapping ) {\n\n needsProgramChange = true;\n\n\t\t\t} else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n needsProgramChange = true;\n\n }\n\n } else {\n\n needsProgramChange = true;\n materialProperties.__version = material.version;\n\n }\n\n //\n\n let program = materialProperties.currentProgram;\n\n\t\tif ( needsProgramChange === true ) {\n\n\t\t\tprogram = getProgram( material, scene, object );\n\n }\n\n let refreshProgram = false;\n let refreshMaterial = false;\n let refreshLights = false;\n\n const p_uniforms = program.getUniforms(),\n m_uniforms = materialProperties.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n refreshProgram = true;\n refreshMaterial = true;\n refreshLights = true;\n\n }\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n _currentMaterialId = material.id;\n\n refreshMaterial = true;\n\n }\n\n\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n }\n\n\t\t\tif ( _currentCamera !== camera ) {\n\n _currentCamera = camera;\n\n // lighting uniforms depend on the camera so enforce an update\n // now, in case this material supports lights - or later, when\n // the next material that does gets activated:\n\n refreshMaterial = true;\t\t// set to true on material change\n refreshLights = true;\t\t// remains set until update done\n\n }\n\n // load material specific uniforms\n // (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n material.isMeshPhongMaterial ||\n material.isMeshToonMaterial ||\n material.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n const uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n }\n\n }\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n material.isMeshToonMaterial ||\n material.isMeshLambertMaterial ||\n material.isMeshBasicMaterial ||\n material.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n }\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n material.isMeshToonMaterial ||\n material.isMeshLambertMaterial ||\n material.isMeshBasicMaterial ||\n material.isMeshStandardMaterial ||\n material.isShaderMaterial ||\n material.isShadowMaterial ||\n\t\t\t\tobject.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n }\n\n }\n\n // skinning and morph target uniforms must be set even if material didn't change\n // auto-setting of texture unit for bone and morph texture must go before other textures\n // otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n const skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n } else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.' );\n\n }\n\n }\n\n }\n\n const morphAttributes = geometry.morphAttributes;\n\n\t\tif ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined && capabilities.isWebGL2 === true ) ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n }\n\n\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n materialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n }\n\n\t\t// https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512\n\n\t\tif ( material.isMeshGouraudMaterial && material.envMap !== null ) {\n\n\t\t\tm_uniforms.envMap.value = envMap;\n\n\t\t\tm_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n // the current material requires lighting info\n\n // note: all lighting uniforms are always set correctly\n // they simply reference the renderer's state for their\n // values\n //\n // use the current material's .needsUpdate flags to set\n // the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n }\n\n // refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog === true ) {\n\n\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n }\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget );\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n }\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n material.uniformsNeedUpdate = false;\n\n }\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n }\n\n // common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t// UBOs\n\n\t\tif ( material.isShaderMaterial || material.isRawShaderMaterial ) {\n\n\t\t\tconst groups = material.uniformsGroups;\n\n\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tuniformsGroups.update( group, program );\n\t\t\t\t\tuniformsGroups.bind( group, program );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n return program;\n\n }\n\n // If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n uniforms.ambientLightColor.needsUpdate = value;\n uniforms.lightProbe.needsUpdate = value;\n\n uniforms.directionalLights.needsUpdate = value;\n uniforms.directionalLightShadows.needsUpdate = value;\n uniforms.pointLights.needsUpdate = value;\n uniforms.pointLightShadows.needsUpdate = value;\n uniforms.spotLights.needsUpdate = value;\n uniforms.spotLightShadows.needsUpdate = value;\n uniforms.rectAreaLights.needsUpdate = value;\n uniforms.hemisphereLights.needsUpdate = value;\n\n }\n\n\tfunction materialNeedsLights( material ) {\n\n return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n material.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n }\n\n this.getActiveCubeFace = function () {\n\n return _currentActiveCubeFace;\n\n };\n\n this.getActiveMipmapLevel = function () {\n\n return _currentActiveMipmapLevel;\n\n };\n\n this.getRenderTarget = function () {\n\n return _currentRenderTarget;\n\n };\n\n\tthis.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {\n\n\t\tproperties.get( renderTarget.texture ).__webglTexture = colorTexture;\n\t\tproperties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n renderTargetProperties.__hasExternalTextures = true;\n\n\t\tif ( renderTargetProperties.__hasExternalTextures ) {\n\n renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;\n\n\t\t\tif ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n // The multisample_render_to_texture extension doesn't work properly if there\n // are midframe flushes and an external depth buffer. Disable use of the extension.\n\t\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );\n renderTargetProperties.__useRenderToTexture = false;\n\n }\n\n }\n\n }\n\n };\n\n\tthis.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n renderTargetProperties.__webglFramebuffer = defaultFramebuffer;\n renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;\n\n };\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n _currentRenderTarget = renderTarget;\n _currentActiveCubeFace = activeCubeFace;\n _currentActiveMipmapLevel = activeMipmapLevel;\n\n let useDefaultFramebuffer = true;\n\t\tlet framebuffer = null;\n\t\tlet isCube = false;\n\t\tlet isRenderTarget3D = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\tif ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {\n\n // We need to make sure to rebind the framebuffer.\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n useDefaultFramebuffer = false;\n\n\t\t\t} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t} else if ( renderTargetProperties.__hasExternalTextures ) {\n\n // Color and depth texture must be rebound in order for the swapchain to update.\n\t\t\t\ttextures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );\n\n }\n\n const texture = renderTarget.texture;\n\n\t\t\tif ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n isRenderTarget3D = true;\n\n }\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n isCube = true;\n\n\t\t\t} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n } else {\n\n framebuffer = __webglFramebuffer;\n\n }\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n _currentScissorTest = renderTarget.scissorTest;\n\n } else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n _currentScissorTest = _scissorTest;\n\n }\n\n\t\tconst framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer ) {\n\n\t\t\tstate.drawBuffers( renderTarget, framebuffer );\n\n }\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n const layer = activeCubeFace || 0;\n\t\t\t_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n }\n\n _currentMaterialId = - 1; // reset current material to ensure correct uniform bindings\n\n };\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n return;\n\n }\n\n\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n }\n\n\t\tif ( framebuffer ) {\n\n\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n try {\n\n const texture = renderTarget.texture;\n const textureFormat = texture.format;\n const textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n return;\n\n }\n\n\t\t\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! halfFloatSupportedByExt ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n return;\n\n }\n\n // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n }\n\n } finally {\n\n // restore framebuffer of current render target if necessary\n\n\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n }\n\n }\n\n };\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, position.x, position.y, width, height );\n\n state.unbindTexture();\n\n };\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n const width = srcTexture.image.width;\n const height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n // As another texture upload may have changed pixelStorei\n // parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n } else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n } else {\n\n\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n }\n\n }\n\n // Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( _gl.TEXTURE_2D );\n\n state.unbindTexture();\n\n };\n\n\tthis.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tif ( _this.isWebGL1Renderer ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );\n return;\n\n }\n\n const width = sourceBox.max.x - sourceBox.min.x + 1;\n const height = sourceBox.max.y - sourceBox.min.y + 1;\n const depth = sourceBox.max.z - sourceBox.min.z + 1;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n let glTarget;\n\n\t\tif ( dstTexture.isData3DTexture ) {\n\n\t\t\ttextures.setTexture3D( dstTexture, 0 );\n glTarget = _gl.TEXTURE_3D;\n\n\t\t} else if ( dstTexture.isDataArrayTexture ) {\n\n\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n glTarget = _gl.TEXTURE_2D_ARRAY;\n\n } else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n return;\n\n }\n\n\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\tconst unpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\tconst unpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\tconst unpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\tconst unpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\tconst unpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ 0 ] : srcTexture.image;\n\n\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, sourceBox.min.x );\n\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, sourceBox.min.y );\n\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, sourceBox.min.z );\n\n\t\tif ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {\n\n\t\t\t_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image.data );\n\n } else {\n\n\t\t\tif ( srcTexture.isCompressedArrayTexture ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' );\n\t\t\t\t_gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data );\n\n } else {\n\n\t\t\t\t_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image );\n\n }\n\n }\n\n\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, unpackRowLen );\n\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight );\n\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, unpackSkipPixels );\n\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, unpackSkipRows );\n\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, unpackSkipImages );\n\n // Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n state.unbindTexture();\n\n };\n\n\tthis.initTexture = function ( texture ) {\n \n if ( texture.isCubeTexture ) {\n\n\t\t\ttextures.setTextureCube( texture, 0 );\n\n\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\ttextures.setTexture3D( texture, 0 );\n\n\t\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\ttextures.setTexture2DArray( texture, 0 );\n\n\t\t} else {\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t}\n\n state.unbindTexture();\n\n };\n\n this.resetState = function () {\n\n _currentActiveCubeFace = 0;\n _currentActiveMipmapLevel = 0;\n _currentRenderTarget = null;\n\n state.reset();\n bindingStates.reset();\n };\n\n if (typeof __THREE_DEVTOOLS__ !== 'undefined') {\n __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', { detail: this }));\n }\n\n // VM-CHANGES: VMRenderer custom functions\n\n this.addSRP = function (srpInstance) {\n srpInstance.setRenderer(this);\n\n if (_this.srpList.indexOf(srpInstance) == -1) {\n _this.srpList.push(srpInstance);\n return true;\n }\n\n return false;\n };\n\n this.removeSRP = function (srpInstance) {\n const idx = _this.srpList.indexOf(srpInstance);\n\n if (idx > -1) {\n _this.srpList.splice(idx, 1);\n return true;\n }\n\n return false;\n };\n }\n\nexport { GlassesRTWebGLRenderer };\n","import { Vector3 } from 'three';\n\nexport function removeDuplicates(arr) {\n return arr.filter((element, index) => {\n return arr.indexOf(element) === index;\n });\n}\n\nexport function arraymove(arr, fromIndex, toIndex) {\n var element = arr[fromIndex];\n arr.splice(fromIndex, 1);\n arr.splice(toIndex, 0, element);\n}\n\nexport function signedAngle(Va, Vb) {\n let angle = Va.angleTo(Vb);\n const cross = Va.clone().cross(Vb);\n if (new Vector3(0, 1, 0).dot(cross) > 0.0001) {\n // Or > 0\n angle = 2 * Math.PI - angle;\n }\n return angle;\n}\n\n/** taken from three.js WebGLRenderList code */\nexport function reversePainterSortStable(a, b) {\n if (a.groupOrder !== b.groupOrder) {\n return a.groupOrder - b.groupOrder;\n } else if (a.renderOrder !== b.renderOrder) {\n return a.renderOrder - b.renderOrder;\n } else if (a.z !== b.z) {\n return b.z - a.z;\n } else {\n return a.id - b.id;\n }\n}\n","import { Object3D, Box3, Mesh, Material, Texture, MeshStandardMaterial } from 'three';\n\ninterface SplitDefinition {\n original: string;\n cuts: string[];\n}\n\nexport enum GlassesGLTFFormats {\n luxottica = 'Luxottica VTO-VM/RTR GLTF', // https://github.com/luxdeepblue/Luxottica-GLTF-requirements/blob/Luxottica-version/Luxottica/internal-pipeline.md\n fittingBox = 'Luxottica Fitting Box GLTF', // https://github.com/luxdeepblue/Luxottica-GLTF-requirements/blob/Luxottica-version/Luxottica/fittingbox.md\n thirdParties = 'Luxottica Third Parties GLTF' // https://github.com/luxdeepblue/Luxottica-GLTF-requirements/blob/Luxottica-version/Luxottica/third-parties.md\n};\n\nexport interface GLTFGlasses {\n gltf: Object3D;\n boundingBox: Box3;\n transmissiveMeshes: Mesh[];\n transparentMeshes: Mesh[];\n hasIridescentLenses: boolean;\n splits: SplitDefinition[];\n meshes: {\n lensL: Mesh[]; // glasses could have just one lens, it will be the left one in the case\n lensR: Mesh[];\n mirrorL: Mesh[]; // glasses could have just one mirror, it will be the left one in the case\n mirrorR: Mesh[];\n logoLensL: Mesh[];\n logoLensR: Mesh[];\n templeL: Mesh[];\n templeR: Mesh[];\n frame: Mesh[];\n };\n groups: {\n lenses: Object3D;\n templeL: Object3D;\n templeR: Object3D;\n frame: Object3D;\n mirror: Object3D | undefined;\n logoLenses: Object3D | undefined;\n };\n\n defaultLensesMaterial: Map;\n headShadowMap: Texture | undefined;\n rosetta: number; // 1 for strict rosetta assets, 0 for non-strict (no Frame group / differently named temple groups) rosetta assets\n}\n/**\n * Parses a GLTF glasses asset, which must conform to the rules at\n * https://github.com/luxdeepblue/Luxottica-GLTF-requirements/blob/Luxottica-version/Luxottica/internal-pipeline.md\n * or\n * https://github.com/luxdeepblue/Luxottica-GLTF-requirements/blob/Luxottica-version/Luxottica/fittingbox.md\n * or\n * https://github.com/luxdeepblue/Luxottica-GLTF-requirements/blob/Luxottica-version/Luxottica/third-parties.md\n *\n * Upon parsing, returns an object containing the asset, plus additional information.\n * Strict mode is enabled by default, it corresponds to Rosetta assets for luxottica internal pipeline format\n */\n\nexport function parseGLTFGlasses(scene: Object3D, format: GlassesGLTFFormats = GlassesGLTFFormats.luxottica, strictMode = false): GLTFGlasses {\n if (format === GlassesGLTFFormats.thirdParties) {\n try {\n return parseFittingBox(scene);\n } catch {\n return parseThirdParties(scene);\n }\n }\n return parseLuxottica(scene, strictMode);\n}\n\n/**\n * parsing according to https://github.com/luxdeepblue/Luxottica-GLTF-requirements/blob/Luxottica-version/Luxottica/internal-pipeline.md\n */\nfunction parseLuxottica(scene: Object3D, strictMode: boolean): GLTFGlasses {\n const transmissiveMeshes = [];\n const transparentMeshes = [];\n let hasIridescentLenses = false;\n const allMeshes = [];\n const meshes = {\n lensL: [],\n lensR: [],\n mirrorL: [],\n mirrorR: [],\n logoLensR: [],\n logoLensL: [],\n templeL: [],\n templeR: [],\n frame: []\n };\n const groups = {\n lenses: undefined,\n templeL: undefined,\n templeR: undefined,\n frame: undefined,\n mirror: undefined,\n logoLenses: undefined\n };\n const splits = [];\n const defaultLensesMaterial: Map = new Map();\n let headShadowMap: Texture | undefined;\n let lensesFound = false;\n let frameFound = false;\n let rosetta = 1; // assumes the asset is conformant\n\n // Some features need a traveral of the scene\n scene.traverse((node) => {\n if ((node.name.startsWith('Lens_') && node.name.endsWith('GRP')) || (node.name.startsWith('Lenses_') && node.name.endsWith('GRP'))) {\n lensesFound = true;\n groups.lenses = node;\n const lensMeshes = allDescendantMeshes(node);\n for (const l of lensMeshes) {\n if (l.name.endsWith('R_GEO')) {\n meshes.lensR.push(l);\n } else {\n meshes.lensL.push(l);\n }\n defaultLensesMaterial.set(l, l.material);\n }\n }\n\n if (node.name.startsWith('Mirror_') && node.name.endsWith('GRP')) {\n groups.mirror = node;\n const mirrorMeshes = allDescendantMeshes(node);\n for (const m of mirrorMeshes) {\n if (m.name.endsWith('R_GEO')) {\n meshes.mirrorR.push(m);\n } else {\n meshes.mirrorL.push(m);\n }\n }\n }\n\n if (node.name.startsWith('LogoLens_') && node.name.endsWith('GRP')) {\n groups.logoLenses = node;\n const logoMeshes = allDescendantMeshes(node);\n for (const l of logoMeshes) {\n if (l.name.endsWith('R_GEO')) {\n meshes.logoLensR.push(l);\n } else {\n meshes.logoLensL.push(l);\n }\n }\n }\n\n if (node.name.startsWith('Frame_') && node.name.endsWith('GRP')) {\n frameFound = true;\n groups.frame = node;\n meshes.frame.push(...allDescendantMeshes(node));\n }\n\n if ((node as Mesh).isMesh) {\n const n = node as Mesh;\n const m = n.material as any;\n allMeshes.push(node);\n if (m.transparent) {\n transparentMeshes.push(node);\n }\n if (m._transmission > 0) {\n transmissiveMeshes.push(node);\n }\n // using duct typing, is there a better alternative??\n if (m.uniforms && m.uniforms.glassesYaw !== undefined) {\n hasIridescentLenses = true;\n }\n if (node.userData.partOf) {\n const split = splits.find((s) => s.original === node.userData.partOf);\n if (split) {\n split.cuts.push(node.name);\n } else {\n splits.push({\n original: node.userData.partOf,\n cuts: [node.name]\n });\n }\n }\n }\n });\n\n if (!lensesFound) {\n throw new Error('asset lacks a Lens group');\n }\n\n let templeLGrp = scene.getObjectByName('Temple_L_Locator_GRP');\n if (templeLGrp) {\n groups.templeL = templeLGrp;\n meshes.templeL.push(...allDescendantMeshes(templeLGrp));\n } else if (strictMode) {\n throw new Error('asset lacks a Temple_L_Locator_GRP group');\n } else {\n templeLGrp = scene.getObjectByName('Temple_L_Locator');\n if (templeLGrp) {\n rosetta = 0;\n groups.templeL = templeLGrp;\n meshes.templeL = allDescendantMeshes(templeLGrp);\n } else {\n throw new Error('asset lacks a Temple_L_Locator group');\n }\n }\n\n let templeRGrp = scene.getObjectByName('Temple_R_Locator_GRP');\n if (templeRGrp) {\n groups.templeR = templeRGrp;\n meshes.templeR.push(...allDescendantMeshes(templeRGrp));\n } else if (strictMode) {\n throw new Error('asset lacks a Temple_R_Locator_GRP group');\n } else {\n templeRGrp = scene.getObjectByName('Temple_R_Locator');\n if (templeRGrp) {\n rosetta = 0;\n groups.templeR = templeRGrp;\n meshes.templeR = allDescendantMeshes(templeRGrp);\n } else {\n throw new Error('asset lacks a Temple_R_Locator group');\n }\n }\n\n if (!frameFound) {\n if (strictMode) {\n throw new Error('asset lacks a Frame group');\n } else {\n rosetta = 0;\n }\n }\n\n const extrasGrp = scene.getObjectByName('Extras_GRP');\n if (extrasGrp !== undefined) {\n const shadowGrp = extrasGrp.getObjectByName('Shadow_GRP');\n\n if (shadowGrp !== undefined) {\n const shadowMesh = shadowGrp.getObjectByName('Shadow_GEO');\n const shadowMat = (shadowMesh as Mesh).material as MeshStandardMaterial;\n headShadowMap = shadowMat.map;\n }\n // now, we remove extra nodes that could cause problems to fitting/rendering\n extrasGrp.parent.remove(extrasGrp);\n }\n\n return {\n boundingBox: computeWorldBounds(scene),\n gltf: scene,\n transmissiveMeshes,\n transparentMeshes,\n hasIridescentLenses,\n meshes,\n groups,\n splits,\n defaultLensesMaterial,\n headShadowMap,\n rosetta\n };\n}\n\n/**\n * parsing according to https://github.com/luxdeepblue/Luxottica-GLTF-requirements/blob/Luxottica-version/Luxottica/fittingbox.md\n */\nfunction parseFittingBox(scene: Object3D): GLTFGlasses {\n const transmissiveMeshes = [];\n const transparentMeshes = [];\n const hasIridescentLenses = false;\n const meshes = {\n lensL: [],\n lensR: [],\n mirrorL: [],\n mirrorR: [],\n logoLensR: [],\n logoLensL: [],\n templeL: [],\n templeR: [],\n frame: []\n };\n const groups = {\n lenses: undefined,\n templeL: undefined,\n templeR: undefined,\n frame: undefined,\n mirror: undefined,\n logoLenses: undefined\n };\n const splits = [];\n const defaultLensesMaterial: Map = new Map();\n const headShadowMap = undefined;\n let lensesFound = false;\n const rosetta = 0;\n\n // Some features need a traveral of the scene\n scene.traverse((node) => {\n if (node.name === 'Lenses') {\n groups.lenses = node;\n node.traverse((lens) => {\n if (lens.name.includes('LensL') && lens.type === 'Mesh') {\n meshes.lensL.push(lens as Mesh);\n lensesFound = true;\n defaultLensesMaterial.set(lens as Mesh, (lens as Mesh).material);\n } else if (lens.name.includes('LensR') && lens.type === 'Mesh') {\n meshes.lensR.push(lens as Mesh);\n defaultLensesMaterial.set(lens as Mesh, (lens as Mesh).material);\n }\n })\n }\n if ((node as Mesh).isMesh) {\n const n = node as Mesh;\n const m = n.material as any;\n if (m.transparent) {\n transparentMeshes.push(node);\n }\n if (m._transmission > 0) {\n transmissiveMeshes.push(node);\n }\n }\n });\n\n if (!lensesFound) {\n throw new Error('asset lacks a Lens group');\n }\n\n return {\n boundingBox: computeWorldBounds(scene),\n gltf: scene,\n transmissiveMeshes,\n transparentMeshes,\n hasIridescentLenses,\n meshes,\n groups,\n splits,\n defaultLensesMaterial,\n headShadowMap,\n rosetta\n };\n}\n\n/**\n * parsing according to https://github.com/luxdeepblue/Luxottica-GLTF-requirements/blob/Luxottica-version/Luxottica/third-parties.md\n */\nfunction parseThirdParties(scene: Object3D): GLTFGlasses {\n const transmissiveMeshes = [];\n const transparentMeshes = [];\n const hasIridescentLenses = false;\n const meshes = {\n lensL: [],\n lensR: [],\n mirrorL: [],\n mirrorR: [],\n logoLensR: [],\n logoLensL: [],\n templeL: [],\n templeR: [],\n frame: []\n };\n const groups = {\n lenses: undefined,\n templeL: undefined,\n templeR: undefined,\n frame: undefined,\n mirror: undefined,\n logoLenses: undefined\n };\n const splits = [];\n const defaultLensesMaterial: Map = new Map();\n const headShadowMap = undefined;\n let lensesFound = false;\n const rosetta = 0;\n\n // Some features need a traveral of the scene\n scene.traverse((node) => {\n if (node.name.startsWith('Lens_') && node.name.endsWith('GRP')) {\n groups.lenses = node;\n const lensMeshes = allDescendantMeshes(node);\n for (const l of lensMeshes) {\n if (l.name.endsWith('R_GEO')) {\n meshes.lensR.push(l);\n } else {\n meshes.lensL.push(l);\n lensesFound = true;\n }\n defaultLensesMaterial.set(l, l.material);\n }\n }\n\n if (node.name.startsWith('LogoLens_') && node.name.endsWith('GRP')) {\n groups.logoLenses = node;\n const logoMeshes = allDescendantMeshes(node);\n for (const l of logoMeshes) {\n if (l.name.endsWith('R_GEO')) {\n meshes.logoLensR.push(l);\n } else {\n meshes.logoLensL.push(l);\n }\n }\n }\n\n if ((node as Mesh).isMesh) {\n const n = node as Mesh;\n const m = n.material as any;\n if (m.transparent) {\n transparentMeshes.push(node);\n }\n if (m._transmission > 0) {\n transmissiveMeshes.push(node);\n }\n }\n });\n\n if (!lensesFound) {\n throw new Error('asset lacks a Lens group');\n }\n\n return {\n boundingBox: computeWorldBounds(scene),\n gltf: scene,\n transmissiveMeshes,\n transparentMeshes,\n hasIridescentLenses,\n meshes,\n groups,\n splits,\n defaultLensesMaterial,\n headShadowMap,\n rosetta\n };\n}\n\nfunction allDescendantMeshes(node: Object3D): Mesh[] {\n const meshes: Mesh[] = [];\n node.traverse((child) => {\n if ((child as Mesh).isMesh) {\n meshes.push(child as Mesh);\n }\n });\n return meshes;\n}\n\nfunction computeWorldBounds(sceneObject: Object3D, recomputeMeshes = true, considerNonVisible = true) {\n const bb = new Box3();\n sceneObject.updateMatrixWorld(false);\n\n if (sceneObject.visible || considerNonVisible) {\n if (sceneObject instanceof Mesh) {\n if (sceneObject.geometry.boundingBox === null || recomputeMeshes) {\n sceneObject.geometry.computeBoundingBox();\n }\n\n bb.copy(sceneObject.geometry.boundingBox);\n bb.applyMatrix4(sceneObject.matrixWorld);\n }\n\n const children = sceneObject.children;\n\n for (const c of children) {\n const b = computeWorldBounds(c, recomputeMeshes, considerNonVisible);\n bb.union(b);\n }\n\n return bb;\n }\n}\n","/**\n * Provides Custom sorting of trasmissive objects in scene\n */\n\nimport { Spherical, Vector3, Matrix4, Object3D, Raycaster, Box3, Mesh, Material } from 'three';\nimport { GlassesRTWebGLRenderer } from './GlassesRTWebGLRenderer';\nimport { GLTFGlasses } from './GLTFGlassesParser';\nimport { removeDuplicates, arraymove, signedAngle, reversePainterSortStable } from './utils';\n\nexport interface AnalysisInfo {\n target: {\n x: number;\n y: number;\n z: number;\n };\n distance: number;\n skip: number;\n}\n\nexport interface RenderOrderInfo {\n azimuthalAngle: number;\n polarAngle: number;\n renderOrder?: string[];\n multiLayerRenderOrder: string[][];\n point?: Vector3;\n angleWithFront?: number;\n}\n\nexport interface transmissiveObjectInfo {\n mesh: string;\n pivot: {\n x: number;\n y: number;\n z: number;\n };\n closestVertex: {\n x: number;\n y: number;\n z: number;\n };\n}\n\nexport interface SortInfo {\n renderingOrders: RenderOrderInfo[];\n transmissiveObjects: transmissiveObjectInfo[];\n analysis?: AnalysisInfo;\n includeTransparent: boolean;\n}\n\nexport interface CustomOrderingScene extends Object3D {\n useCustomOrdering: boolean;\n sort: (renderList: any) => void;\n}\n\nexport interface TransmissionQualityLevels {\n still: number;\n moving: number;\n}\n\ninterface transparentMesh {\n mesh: Mesh;\n pivot: Vector3;\n closestVertex: Vector3;\n transmissive: boolean;\n}\n\nexport class SceneSorter {\n scene: CustomOrderingScene;\n sortInfo: SortInfo;\n transparentMeshes: transparentMesh[] = [];\n enabled: boolean = true;\n cameraAzimuthalAngle: number;\n cameraPolarAngle: number;\n cameraPosition: Vector3;\n raycaster: Raycaster;\n renderer: GlassesRTWebGLRenderer;\n actualRenderOrder: RenderOrderInfo;\n qualityLevels: TransmissionQualityLevels;\n referenceSpherical: Spherical = new Spherical();\n aabb: Box3;\n frontCenter: Vector3;\n\n constructor(scene: Object3D, raycaster: Raycaster, renderer: GlassesRTWebGLRenderer) {\n this.scene = scene as CustomOrderingScene;\n this.scene.useCustomOrdering = false; // needs to be explicitly activated\n this.scene.sort = null;\n\n this.raycaster = raycaster;\n this.renderer = renderer;\n\n this.qualityLevels = {\n still: 1,\n moving: 1\n };\n }\n\n // activates / deactivates multi-layer transmission rendering\n public activateTransmission(active = true) {\n if (active) {\n this.scene.useCustomOrdering = true;\n this.renderer.useMultiLayerTransmission = true;\n if (this.sortInfo !== undefined && this.sortInfo.renderingOrders.length > 0) {\n this.scene.sort = this.sortPrecomputedMultilayer.bind(this);\n } else {\n this.scene.sort = this.sortRaycastPivot.bind(this);\n }\n } else {\n this.scene.sort = (renderList) => {};\n this.renderer.useMultiLayerTransmission = false;\n this.scene.useCustomOrdering = false;\n }\n }\n\n // quality levels are between 0 and 5, with 5 max level\n public setQualityLevel(state: string, value: number) {\n this.qualityLevels[state] = Math.max(1, 6 - Math.max(Math.floor(value), 0));\n }\n\n // sets the current quality level to be used by the renderer\n public setQuality(state: string) {\n this.renderer.transmissionTargetSizeDivider = Math.floor(this.qualityLevels[state]);\n }\n\n // sets the actual angles and position of the viewpoint to be used for determining the render order\n // (i.e., normally, the current camera)\n public setCamera(azimuthalAngle: number, polarAngle: number, position: Vector3, panAware = false) {\n this.cameraAzimuthalAngle = azimuthalAngle;\n this.cameraPolarAngle = polarAngle;\n this.cameraPosition = position;\n\n if (this.aabb && !this.aabb.containsPoint(position) && panAware) {\n let vectorFromFrontCenter = new Vector3().subVectors(position, this.frontCenter);\n vectorFromFrontCenter.y = 0;\n const angle = signedAngle(vectorFromFrontCenter, new Vector3(0, 0, 1));\n\n // find closest angle\n let minDistance = Number.MAX_VALUE;\n for (let i = 0; i < this.sortInfo.renderingOrders.length; i++) {\n const d = Math.abs(angle - this.sortInfo.renderingOrders[i].angleWithFront);\n if (d < minDistance) {\n minDistance = d;\n this.cameraAzimuthalAngle = this.sortInfo.renderingOrders[i].azimuthalAngle;\n }\n }\n }\n }\n\n /**\n *\n * @param {*} sortInfo - sort info read from json\n * @param {*} gltfGlasses - result from parsing the gltf asset\n * @param {*} optimizeOrders - set to true to optimize the precomputed order of the glasses (set to true unless you\n * have a good reason not to do so)\n * @param {*} aabb - aabb of the glasses\n */\n public setSortInfo(sortInfo: SortInfo | undefined, gltfGlasses: GLTFGlasses, optimizeOrders: boolean, aabb?: Box3) {\n let si = sortInfo;\n if (si === undefined) {\n si = {\n transmissiveObjects: [],\n includeTransparent: true,\n renderingOrders: []\n };\n gltfGlasses.gltf.traverse((node) => {\n const m = node as Mesh;\n\n if (m.isMesh) {\n const mat = m.material as any;\n\n if (mat._transmission > 0 || mat.transparent == true) {\n // node.material.side = FrontSide;\n const pivot = node.localToWorld(new Vector3(0, 0, 0));\n si.transmissiveObjects.push({\n mesh: node.name,\n closestVertex: { x: pivot.x, y: pivot.y, z: pivot.z },\n pivot: { x: pivot.x, y: pivot.y, z: pivot.z }\n });\n }\n }\n });\n this.setSortingMethod('pivot');\n } else {\n this.setSortingMethod('mLayerRenderOrder');\n }\n\n this.sortInfo = { ...si };\n this.transparentMeshes = this.sortInfo.transmissiveObjects.map((o) => {\n const mesh = gltfGlasses ? gltfGlasses.gltf.getObjectByName(o.mesh) : this.scene.getObjectByName(o.mesh);\n\n const m = mesh as Mesh;\n\n return {\n pivot: new Vector3(o.pivot.x, o.pivot.y, o.pivot.z),\n closestVertex: new Vector3(o.closestVertex.x, o.closestVertex.y, o.closestVertex.z),\n mesh: m,\n transmissive: gltfGlasses.transmissiveMeshes.includes(m)\n };\n });\n\n if (optimizeOrders && this.sortInfo.renderingOrders) {\n let totalLayersOld = 0;\n let totalLayersNew = 0;\n\n for (const r of this.sortInfo.renderingOrders) {\n totalLayersOld += r.multiLayerRenderOrder.length;\n totalLayersNew += r.multiLayerRenderOrder.length;\n const o = r.multiLayerRenderOrder;\n // process layers backward, do not process layer 0\n for (let i = o.length - 1; i >= 1; i--) {\n // if a layer is composed by just alpha transparent meshes, its meshes can be concatenated to the previous one\n let onlyAlphaTransparentMeshes = true;\n for (const meshName of o[i]) {\n // find mesh\n const meshInfo = this.transparentMeshes.find((m) => m.mesh.name === meshName);\n if (meshInfo.transmissive) {\n onlyAlphaTransparentMeshes = false;\n break;\n }\n }\n if (onlyAlphaTransparentMeshes) {\n // console.log(\n // 'for angle ' +\n // r.azimuthalAngle.toFixed(2) +\n // ', collapsed layers ' +\n // (i - 1) +\n // ' (' +\n // o[i - 1].join(', ') +\n // ') and ' +\n // i +\n // ' (' +\n // o[i].join(', ') +\n // ')'\n // );\n o[i - 1] = o[i - 1].concat(o[i]);\n totalLayersNew = totalLayersNew - 1;\n o.splice(i, 1);\n }\n }\n }\n // console.log('new mlayer order: ', this.sortInfo.renderingOrders);\n // console.log('old render order had average ' + totalLayersOld / this.sortInfo.renderingOrders.length + ' layers');\n // console.log('new render order had average ' + totalLayersNew / this.sortInfo.renderingOrders.length + ' layers');\n }\n\n this.aabb = gltfGlasses ? gltfGlasses.boundingBox : aabb;\n\n // find center of +Z side\n this.frontCenter = this.aabb.getCenter(new Vector3());\n this.frontCenter.z = this.aabb.max.z;\n\n // console.log(this.frontCenter);\n\n const aabbCenter = this.aabb.getCenter(new Vector3());\n\n if (this.sortInfo.renderingOrders) {\n for (let i = 0; i < this.sortInfo.renderingOrders.length; i++) {\n const angle = this.sortInfo.renderingOrders[i].azimuthalAngle;\n const rotationMatrix = new Matrix4().makeRotationAxis(new Vector3(0, 1, 0), angle);\n\n const raycastDistance = this.sortInfo.analysis ? this.sortInfo.analysis.distance : 0.4;\n\n // we are currently assuming 0.4 as ray cast distance, substitute for value in json when available\n // we are also assuming the target of pre-computation was at (0,0,0) in the glasses world space\n const point = new Vector3().set(aabbCenter.x, aabbCenter.y, aabbCenter.z + raycastDistance).applyMatrix4(rotationMatrix);\n\n this.sortInfo.renderingOrders[i].point = point;\n let vectorFromFrontCenter = new Vector3().subVectors(point, this.frontCenter);\n vectorFromFrontCenter.y = 0;\n this.sortInfo.renderingOrders[i].angleWithFront = signedAngle(vectorFromFrontCenter, new Vector3(0, 0, 1));\n }\n }\n }\n\n /**\n * sets the custom sorting method used in rendering with multi-layer transmission\n * @param {string} sortingMethodName\n */\n public setSortingMethod(sortingMethodName: string) {\n if (sortingMethodName === 'pivot') {\n this.scene.sort = this.sortRaycastPivot.bind(this);\n } else if (sortingMethodName === 'closestVertex') {\n this.scene.sort = this.sortRaycastClosestVertex.bind(this);\n } else if (sortingMethodName === 'mLayerRenderOrder') {\n this.scene.sort = this.sortPrecomputedMultilayer.bind(this);\n }\n }\n\n /**\n * clears all internal objects\n */\n public clear() {\n this.sortInfo = null;\n this.transparentMeshes = [];\n }\n\n public dispose() {\n this.clear();\n }\n\n /*\n *\tcustom multi-layer scene sorting using precomputed multi-layer rendering orders\n */\n private sortPrecomputedMultilayer(renderList: any) {\n // default: layered render order is one object per layer, in the order computed by three\n renderList.mLayerTransmissive = [];\n for (const o of renderList.transmissive) {\n renderList.mLayerTransmissive.push([o]);\n }\n if (this.sortInfo && this.sortInfo.includeTransparent) {\n for (const o of renderList.transparent) {\n renderList.mLayerTransmissive.push([o]);\n }\n }\n\n if (renderList.mLayerTransmissive.length > 0 && this.enabled && this.sortInfo !== undefined) {\n const r = this.findClosestRenderOrder(this.cameraAzimuthalAngle, this.cameraPolarAngle);\n\n if (r !== undefined) {\n this.actualRenderOrder = r;\n if (r.multiLayerRenderOrder.length > 0) {\n if (this.sortInfo.includeTransparent) {\n renderList.mLayerTransmissive = this.createMultiLayerRenderList(\n renderList.transmissive.concat(renderList.transparent),\n r.multiLayerRenderOrder,\n 'fromMultiLayer'\n );\n\n renderList.includeTransparent = true;\n } else {\n renderList.mLayerTransmissive = this.createMultiLayerRenderList(\n renderList.transmissive,\n r.multiLayerRenderOrder,\n 'fromMultiLayer'\n );\n renderList.includeTransparent = false;\n }\n } else {\n renderList.mLayerTransmissive = this.createMultiLayerRenderList(renderList.transmissive, r.renderOrder, 'fromSingleLayer');\n console.warn('using single layer render order');\n }\n } else {\n console.warn('undefined custom render order, using default one');\n }\n }\n }\n\n /*\n * custom multi-layer scene sorting using pivot information. This will result in\n * a single object per layer, in the order given by distance from the camera to the pivot,\n * possibly altered by ray casting to each transparent mesh pivot\n */\n private sortRaycastPivot(renderList: any) {\n renderList.mLayerTransmissive = [];\n\n for (const o of renderList.transmissive) {\n renderList.mLayerTransmissive.push(o);\n }\n if (this.sortInfo && this.sortInfo.includeTransparent) {\n for (const o of renderList.transparent) {\n renderList.mLayerTransmissive.push(o);\n }\n }\n // now we need to sort renderList by distance from camera to pivot\n renderList.mLayerTransmissive.sort(reversePainterSortStable);\n\n if (this.sortInfo !== undefined) {\n const points = [];\n for (const t of this.transparentMeshes) {\n points.push(t.pivot.clone());\n }\n\n for (const p of points) {\n this.rayCastPointAndUpdateRenderList(this.cameraPosition, p, renderList.mLayerTransmissive);\n }\n }\n\n // finally, create one layer per object\n renderList.mLayerTransmissive = renderList.mLayerTransmissive.map((o) => [o]);\n }\n\n private sortRaycastClosestVertex(renderList: any) {\n renderList.mLayerTransmissive = [];\n\n for (const o of renderList.transmissive) {\n renderList.mLayerTransmissive.push(o);\n }\n if (this.sortInfo && this.sortInfo.includeTransparent) {\n for (const o of renderList.transparent) {\n renderList.mLayerTransmissive.push(o);\n }\n }\n // now we need to sort renderList by distance from camera to pivot\n renderList.mLayerTransmissive.sort(reversePainterSortStable);\n\n if (this.sortInfo !== undefined) {\n const points = [];\n for (const t of this.transparentMeshes) {\n points.push(t.closestVertex.clone());\n }\n\n for (const p of points) {\n this.rayCastPointAndUpdateRenderList(this.cameraPosition, p, renderList.mLayerTransmissive);\n }\n }\n\n // finally, create one layer per object\n renderList.mLayerTransmissive = renderList.mLayerTransmissive.map((o) => [o]);\n }\n\n /**\n * finds closest render order to given camera azimuthal and polar angles [for now only checks azimuthal]\n */\n private findClosestRenderOrder(azimuthalAngle: number, polarAngle: number) {\n let min = 2 * Math.PI;\n let order = this.sortInfo.renderingOrders[0];\n\n for (const r of this.sortInfo.renderingOrders) {\n const d = Math.min(Math.abs(azimuthalAngle - r.azimuthalAngle), Math.abs(azimuthalAngle - (r.azimuthalAngle - 2 * Math.PI)));\n\n if (d <= min) {\n min = d;\n order = r;\n }\n }\n return order;\n }\n\n /**\n * Creates a multi-layer render order from the available info\n */\n private createMultiLayerRenderList(renderList: any, renderOrder: any, mode: string) {\n const result = [];\n if (mode === 'fromMultiLayer') {\n for (const layer of renderOrder) {\n const renderLayer = [];\n for (const o of layer) {\n const m = renderList.find((e) => e.object.name === o);\n if (m !== undefined) {\n renderLayer.push(m);\n }\n }\n if (renderLayer.length > 0) {\n result.push(renderLayer);\n }\n }\n } else {\n // input render order is an array of objects that must be returned each in its own layer\n const sorted = this.sortRenderList(renderList, renderOrder);\n for (const o of sorted) {\n result.push([o]);\n }\n }\n return result;\n }\n\n // alters the order of given renderList based on an array of intersections, where each object is in front of\n // subsequent ones\n private updateRenderList(renderList: any, intersects: any) {\n for (let i = 0; i < intersects.length; i++) {\n const first = intersects[i];\n for (let j = i + 1; j < intersects.length; j++) {\n const second = intersects[j];\n const firstIndex = renderList.findIndex((o) => o.object.name === first);\n const secondIndex = renderList.findIndex((o) => o.object.name === second);\n if (firstIndex !== -1 && secondIndex !== -1 && firstIndex < secondIndex) {\n // this means, in our render list, first is behind second, but we just discovered\n // that first is in front of second, so move first just after second in render list\n // console.log(\n // \"moving \" +\n // renderList[firstIndex].object.name +\n // \" after \" +\n // renderList[secondIndex].object.name\n // );\n arraymove(renderList, firstIndex, secondIndex);\n }\n }\n }\n return renderList;\n }\n\n private rayCastPointAndUpdateRenderList(startPosition: Vector3, p: Vector3, renderList: any) {\n this.raycaster.set(startPosition, p.sub(this.cameraPosition).normalize());\n\n // calculate objects intersecting the picking ray\n const intersections = this.raycaster.intersectObjects(\n this.transparentMeshes.map((t) => t.mesh),\n false\n );\n //console.log(\"checking \" + mesh.name, intersects);\n let intersects = intersections.map((e) => e.object.name);\n intersects = removeDuplicates(intersects);\n //console.log(intersects);\n\n if (intersects.length > 1) {\n this.updateRenderList(renderList, intersects);\n }\n }\n\n private sortRenderList(renderList: any, renderOrder: any) {\n return renderList.sort((a, b) => {\n const i1 = renderOrder.indexOf(a.object.name);\n const i2 = renderOrder.indexOf(b.object.name);\n if (i1 !== -1 && i2 !== -1) {\n return i1 - i2;\n } else {\n return 0;\n }\n });\n }\n}\n","const ROOT_STYLE_NAME = 'virtual-mirror-root-style';\n\nexport {\n ROOT_STYLE_NAME\n};\n","import { Component, ReactNode } from 'react';\nimport { createLogger } from '../../remotelog/VmLogger';\n\nconst logger = createLogger('ErrorBoundary');\n\ninterface ErrorBoundayProps {\n children: ReactNode\n}\nclass ErrorBoundary extends Component {\n\n constructor(props: ErrorBoundayProps) {\n super(props);\n this.state = { hasError: false, error: '', errorInfo: '' };\n }\n\n public componentDidCatch(error: any, errorInfo: any) {\n logger.error('reactjs component did catch {} - {}', error, errorInfo);\n this.setState({ hasError: true, error, errorInfo });\n }\n\n public render() {\n return this.props.children;\n }\n\n}\n\nexport { ErrorBoundary };\n","import React from 'react';\nimport { LocalizationHelper } from '../../helpers/LocalizationHelper';\nimport './BipaErrorOverlay.scss';\n\nconst BipaErrorOverlay = (props: {\n enabled: boolean,\n onClickOk: () => void\n}) => {\n\n return (\n
\n {props.enabled &&\n
\n
{LocalizationHelper.getString('GENERIC_ERROR', 'ERROR')}
\n \n
\n }\n
\n );\n};\n\nexport {\n BipaErrorOverlay\n};\n","import * as React from 'react';\nimport { LocalizationHelper } from '../../helpers/LocalizationHelper';\nimport './LoadingSpinner.scss';\n\ninterface LoadingSpinnerProps {\n width: number;\n height: number;\n visible: boolean;\n loadingStatus: AppLoadingStatus;\n mirrorStatus: MirrorStatus;\n}\n\nexport class LoadingSpinner extends React.PureComponent {\n\n private showFraction = true;\n\n private overlayIsHidden = (): boolean => {\n const hidden = !this.props.visible || (Object.values(this.props.loadingStatus).filter((v) => v).length\n === Object.keys(this.props.loadingStatus).length);\n return hidden;\n };\n\n private countFraction = (): {\n count: number,\n total: number\n } => {\n return {\n count: Object.values(this.props.loadingStatus).filter((v) => v).length,\n total: Object.keys(this.props.loadingStatus).length,\n };\n };\n\n public render() {\n const size = (this.props.width <= this.props.height) ? this.props.width : this.props.height;\n const hidden = this.overlayIsHidden();\n if (hidden || this.props.mirrorStatus === 'ERROR') { this.showFraction = false; }\n const fraction = this.countFraction();\n\n let errorText;\n if (this.props.mirrorStatus === 'ERROR') {\n errorText = (
\n
\n {LocalizationHelper.getString('WEBCAM_ERROR', 'ERROR')}\n
\n
\n {LocalizationHelper.getString('WEBCAM_ERROR', 'SUBTEXT')}\n
\n
);\n } else if (!this.props.loadingStatus.WEBCAM_ACCESS) {\n errorText = (
\n
\n {LocalizationHelper.getString('PERMISSION_ERROR', 'ERROR')}\n
\n
\n {LocalizationHelper.getString('PERMISSION_ERROR', 'SUBTEXT')}\n
\n
);\n }\n\n return (\n
\n
\n
\n
\n {(this.showFraction) && {fraction.count}/{fraction.total}}\n {(errorText) && errorText}\n
\n );\n }\n}\n","import { BipaFormData, BipaManager, BipaOverlay, BipaPage } from '@luxottica/bipa-manager';\nimport { AgreementType } from '@luxottica/bipa-manager';\nimport { UpcAvailability } from '@luxottica/vm-glasses';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { VtoError } from '../../errors/errors';\nimport { AnalyticsHelper } from '../../helpers/AnalyticsHelper';\nimport { CallbackHelper } from '../../helpers/CallbackHelper';\nimport { ParameterHelper } from '../../helpers/ParameterHelper';\nimport { PrivacyOptions } from '../../interfaces/InitializationTypes';\nimport { MirrorInternalOptions } from '../../interfaces/MirrorOptions';\nimport { MirrorActions } from '../../reducers/mirrorReducer';\nimport { createLogger } from '../../remotelog/VmLogger';\nimport { RootState } from '../../Store';\nimport { BipaErrorOverlay } from '../gui/BipaErrorOverlay';\nimport { LoadingSpinner } from '../gui/LoadingSpinner';\n\nconst logger = createLogger('MirrorLoader');\n\nconst AsyncMirrorContainer = React.lazy(() =>\n import(/* webpackChunkName: \"MirrorContainer\" */ './MirrorContainer')\n .then(({ MirrorContainer }) => ({ default: MirrorContainer })));\n\ninterface MirrorLoaderProps {\n renderKey: number;\n availability: UpcAvailability;\n agreementType: AgreementType;\n onSuccess: () => void;\n onError: (error: VtoError) => void;\n options: MirrorInternalOptions;\n environment?: MicroserviceEnvironment;\n auth?: AuthenticationOptions;\n user?: UserStoreState;\n privacy?: PrivacyOptions;\n glasses?: MirrorB3dAsset | MirrorGltfAsset;\n video?: MirrorVideoData;\n mirrorStatus?: MirrorStatus;\n loadingStatus?: AppLoadingStatus;\n actions?: typeof MirrorActions;\n}\n\ninterface MirrorLoaderState {\n agreementStatus: AgreementStatus;\n}\n\nclass MirrorLoader extends React.Component<\n MirrorLoaderProps,\n MirrorLoaderState\n> {\n\n private currentUpcReady: string = undefined;\n private hasMirrorExperienceCallbackCalled = false;\n\n constructor(props: MirrorLoaderProps) {\n super(props);\n\n this.state = {\n agreementStatus: (BipaManager.biometricCookieExists(props.agreementType) || !props.privacy.bipaActive) ? 'APPROVED' : 'INITIAL'\n };\n }\n\n private meshLoaded(): boolean {\n return this.props.video !== undefined\n && this.props.video.status === 'READY';\n }\n\n private upcAndLens = (upc: string, lensName: string) => `${upc}_${lensName}`;\n\n public componentDidUpdate() {\n logger.debug('rendering mirror for upc {} with status {} [w={},h={}]',\n this.props.availability.upc, this.props.mirrorStatus, this.props.options.width, this.props.options.height);\n }\n\n public render() {\n const appReadyStatus = {\n ...this.props.loadingStatus,\n GLASSES: ParameterHelper.glassesAreReady(this.props.glasses),\n MESH: this.meshLoaded()\n };\n\n const appLoadingStatus = {\n ...appReadyStatus,\n GLASSES: !!this.props.glasses && this.props.glasses.status === 'READY',\n };\n\n if (this.props.glasses?.upc !== undefined\n && this.upcAndLens(this.props.glasses.upc, this.props.options.transitionColor) !== this.currentUpcReady\n && Object.values(appLoadingStatus).every((value) => value)) {\n // here is possible to add actions that happens after the loading screen\n AnalyticsHelper.onRenderReady(this.props.glasses.upc, this.props.options.transitionColor);\n this.currentUpcReady = this.upcAndLens(this.props.glasses.upc, this.props.options.transitionColor);\n }\n\n let content;\n switch (this.state.agreementStatus) {\n case 'INITIAL':\n CallbackHelper.onPrivacyDisplay();\n content = (\n {\n CallbackHelper.onAuthUpdated(authData);\n },\n onDisplayPage: (page: BipaPage) => {\n CallbackHelper.onDisplayPage(page);\n },\n onSubmit: (formData?: BipaFormData) => {\n this.setState({ agreementStatus: 'APPROVED' });\n CallbackHelper.onPrivacyAgree(formData);\n },\n onUserReject: () => {\n this.setState({ agreementStatus: 'REJECTED' });\n CallbackHelper.onPrivacyReject();\n },\n onError: (error) => {\n this.setState({ agreementStatus: 'ERROR' });\n CallbackHelper.onPrivacyFail(error);\n },\n onPrivacyPolicyClick: CallbackHelper.onPrivacyPolicyClick,\n onTermsAndConditionsClick: CallbackHelper.onTermsAndConditionsClick,\n }} privacy={{\n termsAndConditions: new URL(this.props.privacy.termsAndConditions),\n localizationText: this.props.privacy.localizationText\n }}/>\n );\n break;\n case 'APPROVED':\n // dirty way to trigger this callback only once\n if (!this.hasMirrorExperienceCallbackCalled) {\n this.hasMirrorExperienceCallbackCalled = true;\n CallbackHelper.onMirrorExperience();\n }\n content = (\n \n \n \n );\n break;\n case 'ERROR':\n content = { this.setState({ agreementStatus: 'INITIAL' }); }} />;\n break;\n case 'REJECTED':\n default:\n content = <>;\n break;\n }\n\n return (\n
\n \n {content}\n
\n );\n }\n}\n\nfunction mapStateToProps(state: RootState) {\n return {\n environment: state.app.environment,\n auth: state.app.auth,\n user: state.user,\n glasses: state.mirror.glasses,\n video: state.mirror.video,\n mirrorStatus: state.mirror.mirrorStatus,\n privacy: state.app.privacy,\n loadingStatus: state.app.loading\n };\n}\n\nfunction mapDispatchToProps(dispatch: any) {\n return {\n actions: bindActionCreators({\n ...MirrorActions,\n }, dispatch),\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MirrorLoader);\n","import { AgreementType } from '@luxottica/bipa-manager';\nimport { UpcAvailability } from '@luxottica/vm-glasses';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { AnyAction, Store } from 'redux';\nimport { ROOT_STYLE_NAME } from '../../constants/Styling';\nimport { VtoError } from '../../errors/errors';\nimport { useBiometricBipa } from '../../helpers/CallbackHelper';\nimport { MirrorInternalOptions } from '../../interfaces/MirrorOptions';\nimport { RootState } from '../../Store';\nimport { ErrorBoundary } from './ErrorBoundary';\nimport MirrorLoader from './MirrorLoader';\n\nclass MirrorAsyncRoot {\n\n private static renderKey = 0;\n\n public static mountMirror = (\n container: Element,\n store: Store,\n availability: UpcAvailability,\n onSuccess: () => void,\n onError: (error: VtoError) => void,\n mirrorOptions: Required\n ): void => {\n\n container.classList.add(ROOT_STYLE_NAME);\n \n // renderkey is used to keep track of when the render function is called.\n // It will let you distinguish between manual updates and internal react updates.\n // This helps determine when the success promise should be resolved or rejected.\n MirrorAsyncRoot.renderKey++;\n const agreementType = useBiometricBipa() ? AgreementType.BIOMETRIC : AgreementType.BASIC;\n\n ReactDOM.render(\n \n \n \n \n ,\n container,\n );\n };\n}\n\nexport {\n MirrorAsyncRoot\n};\n","/** @license React v17.0.2\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=60103,c=60106,d=60107,e=60108,f=60114,g=60109,h=60110,k=60112,l=60113,m=60120,n=60115,p=60116,q=60121,r=60122,u=60117,v=60129,w=60131;\nif(\"function\"===typeof Symbol&&Symbol.for){var x=Symbol.for;b=x(\"react.element\");c=x(\"react.portal\");d=x(\"react.fragment\");e=x(\"react.strict_mode\");f=x(\"react.profiler\");g=x(\"react.provider\");h=x(\"react.context\");k=x(\"react.forward_ref\");l=x(\"react.suspense\");m=x(\"react.suspense_list\");n=x(\"react.memo\");p=x(\"react.lazy\");q=x(\"react.block\");r=x(\"react.server.block\");u=x(\"react.fundamental\");v=x(\"react.debug_trace_mode\");w=x(\"react.legacy_hidden\")}\nfunction y(a){if(\"object\"===typeof a&&null!==a){var t=a.$$typeof;switch(t){case b:switch(a=a.type,a){case d:case f:case e:case l:case m:return a;default:switch(a=a&&a.$$typeof,a){case h:case k:case p:case n:case g:return a;default:return t}}case c:return t}}}var z=g,A=b,B=k,C=d,D=p,E=n,F=c,G=f,H=e,I=l;exports.ContextConsumer=h;exports.ContextProvider=z;exports.Element=A;exports.ForwardRef=B;exports.Fragment=C;exports.Lazy=D;exports.Memo=E;exports.Portal=F;exports.Profiler=G;exports.StrictMode=H;\nexports.Suspense=I;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return y(a)===h};exports.isContextProvider=function(a){return y(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return y(a)===k};exports.isFragment=function(a){return y(a)===d};exports.isLazy=function(a){return y(a)===p};exports.isMemo=function(a){return y(a)===n};\nexports.isPortal=function(a){return y(a)===c};exports.isProfiler=function(a){return y(a)===f};exports.isStrictMode=function(a){return y(a)===e};exports.isSuspense=function(a){return y(a)===l};exports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===v||a===e||a===l||a===m||a===w||\"object\"===typeof a&&null!==a&&(a.$$typeof===p||a.$$typeof===n||a.$$typeof===g||a.$$typeof===h||a.$$typeof===k||a.$$typeof===u||a.$$typeof===q||a[0]===r)?!0:!1};\nexports.typeOf=y;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import React from 'react';\nexport var ReactReduxContext = /*#__PURE__*/React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n ReactReduxContext.displayName = 'ReactRedux';\n}\n\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n return batch;\n};","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n var batch = getBatch();\n var first = null;\n var last = null;\n return {\n clear: function clear() {\n first = null;\n last = null;\n },\n notify: function notify() {\n batch(function () {\n var listener = first;\n\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n get: function get() {\n var listeners = [];\n var listener = first;\n\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n\n return listeners;\n },\n subscribe: function subscribe(callback) {\n var isSubscribed = true;\n var listener = last = {\n callback: callback,\n next: null,\n prev: last\n };\n\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n\n return function unsubscribe() {\n if (!isSubscribed || first === null) return;\n isSubscribed = false;\n\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n };\n}\n\nvar nullListeners = {\n notify: function notify() {},\n get: function get() {\n return [];\n }\n};\nexport function createSubscription(store, parentSub) {\n var unsubscribe;\n var listeners = nullListeners;\n\n function addNestedSub(listener) {\n trySubscribe();\n return listeners.subscribe(listener);\n }\n\n function notifyNestedSubs() {\n listeners.notify();\n }\n\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n\n function isSubscribed() {\n return Boolean(unsubscribe);\n }\n\n function trySubscribe() {\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n\n function tryUnsubscribe() {\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = undefined;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n\n var subscription = {\n addNestedSub: addNestedSub,\n notifyNestedSubs: notifyNestedSubs,\n handleChangeWrapper: handleChangeWrapper,\n isSubscribed: isSubscribed,\n trySubscribe: trySubscribe,\n tryUnsubscribe: tryUnsubscribe,\n getListeners: function getListeners() {\n return listeners;\n }\n };\n return subscription;\n}","import { useEffect, useLayoutEffect } from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider(_ref) {\n var store = _ref.store,\n context = _ref.context,\n children = _ref.children;\n var contextValue = useMemo(function () {\n var subscription = createSubscription(store);\n return {\n store: store,\n subscription: subscription\n };\n }, [store]);\n var previousState = useMemo(function () {\n return store.getState();\n }, [store]);\n useIsomorphicLayoutEffect(function () {\n var subscription = contextValue.subscription;\n subscription.onStateChange = subscription.notifyNestedSubs;\n subscription.trySubscribe();\n\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n\n return function () {\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n };\n }, [contextValue, previousState]);\n var Context = context || ReactReduxContext;\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nif (process.env.NODE_ENV !== 'production') {\n Provider.propTypes = {\n store: PropTypes.shape({\n subscribe: PropTypes.func.isRequired,\n dispatch: PropTypes.func.isRequired,\n getState: PropTypes.func.isRequired\n }),\n context: PropTypes.object,\n children: PropTypes.any\n };\n}\n\nexport default Provider;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"],\n _excluded2 = [\"reactReduxForwardedRef\"];\nimport hoistStatics from 'hoist-non-react-statics';\nimport React, { useContext, useMemo, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n var updateCount = state[1];\n return [action.payload, updateCount + 1];\n}\n\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(function () {\n return effectFunc.apply(void 0, effectArgs);\n }, dependencies);\n}\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n // We want to capture the wrapper props and child props we used for later comparisons\n lastWrapperProps.current = wrapperProps;\n lastChildProps.current = actualChildProps;\n renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n}\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch) {\n // If we're not subscribed to the store, nothing to do here\n if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts\n\n var didUnsubscribe = false;\n var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n var checkForUpdates = function checkForUpdates() {\n if (didUnsubscribe) {\n // Don't run stale listeners.\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n return;\n }\n\n var latestStoreState = store.getState();\n var newChildProps, error;\n\n try {\n // Actually run the selector with the most recent store state and wrapper props\n // to determine what the child props should be\n newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n\n if (!error) {\n lastThrownError = null;\n } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n // Save references to the new child props. Note that we track the \"child props from store update\"\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n // been processed. If this went into useState/useReducer, we couldn't clear out the value without\n // forcing another re-render, which we don't want.\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n forceComponentUpdateDispatch({\n type: 'STORE_UPDATED',\n payload: {\n error: error\n }\n });\n }\n }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n // changed since we began.\n\n checkForUpdates();\n\n var unsubscribeWrapper = function unsubscribeWrapper() {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n\n if (lastThrownError) {\n // It's possible that we caught an error due to a bad mapState function, but the\n // parent re-rendered without this component and we're about to unmount.\n // This shouldn't happen as long as we do top-down subscriptions correctly, but\n // if we ever do those wrong, this throw will surface the error in our tests.\n // In that case, throw the error from here so it doesn't get lost.\n throw lastThrownError;\n }\n };\n\n return unsubscribeWrapper;\n}\n\nvar initStateUpdates = function initStateUpdates() {\n return [null, 0];\n};\n\nexport default function connectAdvanced(\n/*\r\n selectorFactory is a func that is responsible for returning the selector function used to\r\n compute new props from state, props, and dispatch. For example:\r\n export default connectAdvanced((dispatch, options) => (state, props) => ({\r\n thing: state.things[props.thingId],\r\n saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\r\n }))(YourComponent)\r\n Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\r\n outside of their selector as an optimization. Options passed to connectAdvanced are passed to\r\n the selectorFactory, along with displayName and WrappedComponent, as the second argument.\r\n Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\r\n props. Do not use connectAdvanced directly without memoizing results between calls to your\r\n selector, otherwise the Connect component will re-render on every state or props change.\r\n*/\nselectorFactory, // options object:\n_ref) {\n if (_ref === void 0) {\n _ref = {};\n }\n\n var _ref2 = _ref,\n _ref2$getDisplayName = _ref2.getDisplayName,\n getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n return \"ConnectAdvanced(\" + name + \")\";\n } : _ref2$getDisplayName,\n _ref2$methodName = _ref2.methodName,\n methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n _ref2$renderCountProp = _ref2.renderCountProp,\n renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n _ref2$storeKey = _ref2.storeKey,\n storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n _ref2$withRef = _ref2.withRef,\n withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n _ref2$forwardRef = _ref2.forwardRef,\n forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n _ref2$context = _ref2.context,\n context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n connectOptions = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n if (process.env.NODE_ENV !== 'production') {\n if (renderCountProp !== undefined) {\n throw new Error(\"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n }\n\n if (withRef) {\n throw new Error('withRef is removed. To access the wrapped instance, use a ref on the connected component');\n }\n\n var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: . ' + 'You may also pass a {context : MyContext} option to connect';\n\n if (storeKey !== 'store') {\n throw new Error('storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n }\n }\n\n var Context = context;\n return function wrapWithConnect(WrappedComponent) {\n if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n throw new Error(\"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n }\n\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n var displayName = getDisplayName(wrappedComponentName);\n\n var selectorFactoryOptions = _extends({}, connectOptions, {\n getDisplayName: getDisplayName,\n methodName: methodName,\n renderCountProp: renderCountProp,\n shouldHandleStateChanges: shouldHandleStateChanges,\n storeKey: storeKey,\n displayName: displayName,\n wrappedComponentName: wrappedComponentName,\n WrappedComponent: WrappedComponent\n });\n\n var pure = connectOptions.pure;\n\n function createChildSelector(store) {\n return selectorFactory(store.dispatch, selectorFactoryOptions);\n } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n // that just executes the given callback immediately.\n\n\n var usePureOnlyMemo = pure ? useMemo : function (callback) {\n return callback();\n };\n\n function ConnectFunction(props) {\n var _useMemo = useMemo(function () {\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\n // and values needed to control behavior (forwarded refs, alternate context instances).\n // To maintain the wrapperProps object reference, memoize this destructuring.\n var reactReduxForwardedRef = props.reactReduxForwardedRef,\n wrapperProps = _objectWithoutPropertiesLoose(props, _excluded2);\n\n return [props.context, reactReduxForwardedRef, wrapperProps];\n }, [props]),\n propsContext = _useMemo[0],\n reactReduxForwardedRef = _useMemo[1],\n wrapperProps = _useMemo[2];\n\n var ContextToUse = useMemo(function () {\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n // Memoize the check that determines which context instance we should use.\n return propsContext && propsContext.Consumer && isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n var contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n // We'll check to see if it _looks_ like a Redux store first.\n // This allows us to pass through a `store` prop that is just a plain value.\n\n var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(\"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a , \") + \"or pass a custom React context provider to and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\"));\n } // Based on the previous check, one of these must be true\n\n\n var store = didStoreComeFromProps ? props.store : contextValue.store;\n var childPropsSelector = useMemo(function () {\n // The child props selector needs the store reference as an input.\n // Re-create this selector whenever the store changes.\n return createChildSelector(store);\n }, [store]);\n\n var _useMemo2 = useMemo(function () {\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n var subscription = createSubscription(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n\n // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n return [subscription, notifyNestedSubs];\n }, [store, didStoreComeFromProps, contextValue]),\n subscription = _useMemo2[0],\n notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,\n // and memoize that value to avoid unnecessary context updates.\n\n\n var overriddenContextValue = useMemo(function () {\n if (didStoreComeFromProps) {\n // This component is directly subscribed to a store from props.\n // We don't want descendants reading from this store - pass down whatever\n // the existing context value is from the nearest connected ancestor.\n return contextValue;\n } // Otherwise, put this component's subscription instance into context, so that\n // connected descendants won't update until after this component is done\n\n\n return _extends({}, contextValue, {\n subscription: subscription\n });\n }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n // causes a change to the calculated child component props (or we caught an error in mapState)\n\n var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n _useReducer$ = _useReducer[0],\n previousStateUpdateResult = _useReducer$[0],\n forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n if (previousStateUpdateResult && previousStateUpdateResult.error) {\n throw previousStateUpdateResult.error;\n } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n var lastChildProps = useRef();\n var lastWrapperProps = useRef(wrapperProps);\n var childPropsFromStoreUpdate = useRef();\n var renderIsScheduled = useRef(false);\n var actualChildProps = usePureOnlyMemo(function () {\n // Tricky logic here:\n // - This render may have been triggered by a Redux store update that produced new child props\n // - However, we may have gotten new wrapper props after that\n // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n } // TODO We're reading the store directly in render() here. Bad idea?\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n // to determine what the child props should be.\n\n\n return childPropsSelector(store.getState(), wrapperProps);\n }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n // just useEffect instead to avoid the warning, since neither will run anyway.\n\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs]); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n useIsomorphicLayoutEffectWithArgs(subscribeUpdates, [shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch], [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.\n // We memoize the elements for the rendered child component as an optimization.\n\n var renderedWrappedComponent = useMemo(function () {\n return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n ref: reactReduxForwardedRef\n }));\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n var renderedChild = useMemo(function () {\n if (shouldHandleStateChanges) {\n // If this component is subscribed to store updates, we need to pass its own\n // subscription instance down to our descendants. That means rendering the same\n // Context instance, and putting a different value into the context.\n return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n value: overriddenContextValue\n }, renderedWrappedComponent);\n }\n\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n var Connect = pure ? React.memo(ConnectFunction) : ConnectFunction;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n\n if (forwardRef) {\n var forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n reactReduxForwardedRef: ref\n }));\n });\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return hoistStatics(forwarded, WrappedComponent);\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n}","function is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nexport default function shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (var i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch, options) {\n var constant = getConstant(dispatch, options);\n\n function constantSelector() {\n return constant;\n }\n\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n// * Detects whether the mapToProps function being called depends on props, which\n// is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n// * On first call, handles mapToProps if returns another function, and treats that\n// new function as the true mapToProps for subsequent calls.\n//\n// * On first call, verifies the first result is a plain object, in order to warn\n// the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, _ref) {\n var displayName = _ref.displayName;\n\n var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n }; // allow detectFactoryAndVerify to get ownProps\n\n\n proxy.dependsOnOwnProps = true;\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n var props = proxy(stateOrDispatch, ownProps);\n\n if (typeof props === 'function') {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n return props;\n };\n\n return proxy;\n };\n}","import bindActionCreators from '../utils/bindActionCreators';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n return {\n dispatch: dispatch\n };\n }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n return bindActionCreators(mapDispatchToProps, dispatch);\n }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","export default function bindActionCreators(actionCreators, dispatch) {\n var boundActionCreators = {};\n\n var _loop = function _loop(key) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = function () {\n return dispatch(actionCreator.apply(void 0, arguments));\n };\n }\n };\n\n for (var key in actionCreators) {\n _loop(key);\n }\n\n return boundActionCreators;\n}","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(function () {\n return {};\n }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, _ref) {\n var displayName = _ref.displayName,\n pure = _ref.pure,\n areMergedPropsEqual = _ref.areMergedPropsEqual;\n var hasRunOnce = false;\n var mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n if (hasRunOnce) {\n if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n return !mergeProps ? function () {\n return defaultMergeProps;\n } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"];\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n return function impureFinalPropsSelector(state, ownProps) {\n return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n var areStatesEqual = _ref.areStatesEqual,\n areOwnPropsEqual = _ref.areOwnPropsEqual,\n areStatePropsEqual = _ref.areStatePropsEqual;\n var hasRunAtLeastOnce = false;\n var state;\n var ownProps;\n var stateProps;\n var dispatchProps;\n var mergedProps;\n\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewState() {\n var nextStateProps = mapStateToProps(state, ownProps);\n var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleSubsequentCalls(nextState, nextOwnProps) {\n var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n var stateChanged = !areStatesEqual(nextState, state);\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n var initMapStateToProps = _ref2.initMapStateToProps,\n initMapDispatchToProps = _ref2.initMapDispatchToProps,\n initMergeProps = _ref2.initMergeProps,\n options = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n var mapStateToProps = initMapStateToProps(dispatch, options);\n var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n var mergeProps = initMergeProps(dispatch, options);\n\n if (process.env.NODE_ENV !== 'production') {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n }\n\n var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"];\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\r\n connect is a facade over connectAdvanced. It turns its args into a compatible\r\n selectorFactory, which has the signature:\r\n\r\n (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\r\n \r\n connect passes its args to connectAdvanced as options, which will in turn pass them to\r\n selectorFactory each time a Connect component instance is instantiated or hot reloaded.\r\n\r\n selectorFactory returns a final props selector from its mapStateToProps,\r\n mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\r\n mergePropsFactories, and pure args.\r\n\r\n The resulting final props selector is called by the Connect component instance whenever\r\n it receives new props or store state.\r\n */\n\nfunction match(arg, factories, name) {\n for (var i = factories.length - 1; i >= 0; i--) {\n var result = factories[i](arg);\n if (result) return result;\n }\n\n return function (dispatch, options) {\n throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n };\n}\n\nfunction strictEqual(a, b) {\n return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$connectHOC = _ref.connectHOC,\n connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n _ref$mergePropsFactor = _ref.mergePropsFactories,\n mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n _ref$selectorFactory = _ref.selectorFactory,\n selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n if (_ref2 === void 0) {\n _ref2 = {};\n }\n\n var _ref3 = _ref2,\n _ref3$pure = _ref3.pure,\n pure = _ref3$pure === void 0 ? true : _ref3$pure,\n _ref3$areStatesEqual = _ref3.areStatesEqual,\n areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n extraOptions = _objectWithoutPropertiesLoose(_ref3, _excluded);\n\n var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n return connectHOC(selectorFactory, _extends({\n // used in error messages\n methodName: 'connect',\n // used to compute Connect's displayName from the wrapped component's displayName.\n getDisplayName: function getDisplayName(name) {\n return \"Connect(\" + name + \")\";\n },\n // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n shouldHandleStateChanges: Boolean(mapStateToProps),\n // passed through to selectorFactory\n initMapStateToProps: initMapStateToProps,\n initMapDispatchToProps: initMapDispatchToProps,\n initMergeProps: initMergeProps,\n pure: pure,\n areStatesEqual: areStatesEqual,\n areOwnPropsEqual: areOwnPropsEqual,\n areStatePropsEqual: areStatePropsEqual,\n areMergedPropsEqual: areMergedPropsEqual\n }, extraOptions));\n };\n}\nexport default /*#__PURE__*/createConnect();","import { useReducer, useRef, useMemo, useContext, useDebugValue } from 'react';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from '../components/Context';\n\nvar refEquality = function refEquality(a, b) {\n return a === b;\n};\n\nfunction useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) {\n var _useReducer = useReducer(function (s) {\n return s + 1;\n }, 0),\n forceRender = _useReducer[1];\n\n var subscription = useMemo(function () {\n return createSubscription(store, contextSub);\n }, [store, contextSub]);\n var latestSubscriptionCallbackError = useRef();\n var latestSelector = useRef();\n var latestStoreState = useRef();\n var latestSelectedState = useRef();\n var storeState = store.getState();\n var selectedState;\n\n try {\n if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) {\n var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references\n\n if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) {\n selectedState = newSelectedState;\n } else {\n selectedState = latestSelectedState.current;\n }\n } else {\n selectedState = latestSelectedState.current;\n }\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n err.message += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\n\";\n }\n\n throw err;\n }\n\n useIsomorphicLayoutEffect(function () {\n latestSelector.current = selector;\n latestStoreState.current = storeState;\n latestSelectedState.current = selectedState;\n latestSubscriptionCallbackError.current = undefined;\n });\n useIsomorphicLayoutEffect(function () {\n function checkForUpdates() {\n try {\n var newStoreState = store.getState(); // Avoid calling selector multiple times if the store's state has not changed\n\n if (newStoreState === latestStoreState.current) {\n return;\n }\n\n var _newSelectedState = latestSelector.current(newStoreState);\n\n if (equalityFn(_newSelectedState, latestSelectedState.current)) {\n return;\n }\n\n latestSelectedState.current = _newSelectedState;\n latestStoreState.current = newStoreState;\n } catch (err) {\n // we ignore all errors here, since when the component\n // is re-rendered, the selectors are called again, and\n // will throw again, if neither props nor store state\n // changed\n latestSubscriptionCallbackError.current = err;\n }\n\n forceRender();\n }\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe();\n checkForUpdates();\n return function () {\n return subscription.tryUnsubscribe();\n };\n }, [store, subscription]);\n return selectedState;\n}\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context) {\n if (context === void 0) {\n context = ReactReduxContext;\n }\n\n var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n return useContext(context);\n };\n return function useSelector(selector, equalityFn) {\n if (equalityFn === void 0) {\n equalityFn = refEquality;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!selector) {\n throw new Error(\"You must pass a selector to useSelector\");\n }\n\n if (typeof selector !== 'function') {\n throw new Error(\"You must pass a function as a selector to useSelector\");\n }\n\n if (typeof equalityFn !== 'function') {\n throw new Error(\"You must pass a function as an equality function to useSelector\");\n }\n }\n\n var _useReduxContext = useReduxContext(),\n store = _useReduxContext.store,\n contextSub = _useReduxContext.subscription;\n\n var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub);\n useDebugValue(selectedState);\n return selectedState;\n };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const counter = useSelector(state => state.counter)\r\n * return
{counter}
\r\n * }\r\n */\n\nexport var useSelector = /*#__PURE__*/createSelectorHook();","export * from './exports';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch'; // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };","export default function warn(s) {\n console.warn('[react-ga]', s);\n}","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport warn from '../utils/console/warn';\nvar NEWTAB = '_blank';\nvar MIDDLECLICK = 1;\n\nvar OutboundLink =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(OutboundLink, _Component);\n\n function OutboundLink() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, OutboundLink);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(OutboundLink)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"handleClick\", function (event) {\n var _this$props = _this.props,\n target = _this$props.target,\n eventLabel = _this$props.eventLabel,\n to = _this$props.to,\n onClick = _this$props.onClick,\n trackerNames = _this$props.trackerNames;\n var eventMeta = {\n label: eventLabel\n };\n var sameTarget = target !== NEWTAB;\n var normalClick = !(event.ctrlKey || event.shiftKey || event.metaKey || event.button === MIDDLECLICK);\n\n if (sameTarget && normalClick) {\n event.preventDefault();\n OutboundLink.trackLink(eventMeta, function () {\n window.location.href = to;\n }, trackerNames);\n } else {\n OutboundLink.trackLink(eventMeta, function () {}, trackerNames);\n }\n\n if (onClick) {\n onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(OutboundLink, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n href = _this$props2.to,\n oldProps = _objectWithoutProperties(_this$props2, [\"to\"]);\n\n var props = _objectSpread({}, oldProps, {\n href: href,\n onClick: this.handleClick\n });\n\n if (this.props.target === NEWTAB) {\n props.rel = 'noopener noreferrer';\n }\n\n delete props.eventLabel;\n delete props.trackerNames;\n return React.createElement('a', props);\n }\n }]);\n\n return OutboundLink;\n}(Component);\n\n_defineProperty(OutboundLink, \"trackLink\", function () {\n warn('ga tracking not enabled');\n});\n\n_defineProperty(OutboundLink, \"propTypes\", {\n eventLabel: PropTypes.string.isRequired,\n target: PropTypes.string,\n to: PropTypes.string,\n onClick: PropTypes.func,\n trackerNames: PropTypes.arrayOf(PropTypes.string)\n});\n\n_defineProperty(OutboundLink, \"defaultProps\", {\n target: null,\n to: null,\n onClick: null,\n trackerNames: null\n});\n\nexport { OutboundLink as default };","// GA strings need to have leading/trailing whitespace trimmed, and not all\n// browsers have String.prototoype.trim().\nexport default function trim(s) {\n return s.replace(/^\\s+|\\s+$/g, '');\n}","/**\n * To Title Case 2.1 - http://individed.com/code/to-title-case/\n * Copyright 2008-2013 David Gouch. Licensed under the MIT License.\n * https://github.com/gouch/to-title-case\n */\nimport trim from './trim';\nvar smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\\.?|via)$/i;\nexport default function toTitleCase(string) {\n return trim(string).replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, function (match, index, title) {\n if (index > 0 && index + match.length !== title.length && match.search(smallWords) > -1 && title.charAt(index - 2) !== ':' && (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') && title.charAt(index - 1).search(/[^\\s-]/) < 0) {\n return match.toLowerCase();\n }\n\n if (match.substr(1).search(/[A-Z]|\\../) > -1) {\n return match;\n }\n\n return match.charAt(0).toUpperCase() + match.substr(1);\n });\n}","import mightBeEmail from './mightBeEmail';\nimport toTitleCase from './toTitleCase';\nimport warn from './console/warn';\nvar redacted = 'REDACTED (Potential Email Address)';\nexport default function format(s, titleCase) {\n if (mightBeEmail(s)) {\n warn('This arg looks like an email address, redacting.');\n return redacted;\n }\n\n if (titleCase) {\n return toTitleCase(s);\n }\n\n return s;\n}","// See if s could be an email address. We don't want to send personal data like email.\n// https://support.google.com/analytics/answer/2795983?hl=en\nexport default function mightBeEmail(s) {\n // There's no point trying to validate rfc822 fully, just look for ...@...\n return typeof s === 'string' && s.indexOf('@') !== -1;\n}","export default function log(s) {\n console.info('[react-ga]', s);\n}","export var gaCalls = [];\nexport default {\n calls: gaCalls,\n ga: function ga() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n gaCalls.push([].concat(args));\n },\n resetCalls: function resetCalls() {\n gaCalls.length = 0;\n }\n};","function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\n/**\n * React Google Analytics Module\n *\n * @package react-ga\n * @author Adam Lofting \n * Atul Varma \n */\n\n/**\n * Utilities\n */\nimport format from './utils/format';\nimport removeLeadingSlash from './utils/removeLeadingSlash';\nimport trim from './utils/trim';\nimport loadGA from './utils/loadGA';\nimport warn from './utils/console/warn';\nimport log from './utils/console/log';\nimport TestModeAPI from './utils/testModeAPI';\n\nvar _isNotBrowser = typeof window === 'undefined' || typeof document === 'undefined';\n\nvar _debug = false;\nvar _titleCase = true;\nvar _testMode = false;\nvar _alwaysSendToDefaultTracker = true;\n\nvar internalGa = function internalGa() {\n var _window;\n\n if (_testMode) return TestModeAPI.ga.apply(TestModeAPI, arguments);\n if (_isNotBrowser) return false;\n if (!window.ga) return warn('ReactGA.initialize must be called first or GoogleAnalytics should be loaded manually');\n return (_window = window).ga.apply(_window, arguments);\n};\n\nfunction _format(s) {\n return format(s, _titleCase);\n}\n\nfunction _gaCommand(trackerNames) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var command = args[0];\n\n if (typeof internalGa === 'function') {\n if (typeof command !== 'string') {\n warn('ga command must be a string');\n return;\n }\n\n if (_alwaysSendToDefaultTracker || !Array.isArray(trackerNames)) internalGa.apply(void 0, args);\n\n if (Array.isArray(trackerNames)) {\n trackerNames.forEach(function (name) {\n internalGa.apply(void 0, _toConsumableArray([\"\".concat(name, \".\").concat(command)].concat(args.slice(1))));\n });\n }\n }\n}\n\nfunction _initialize(gaTrackingID, options) {\n if (!gaTrackingID) {\n warn('gaTrackingID is required in initialize()');\n return;\n }\n\n if (options) {\n if (options.debug && options.debug === true) {\n _debug = true;\n }\n\n if (options.titleCase === false) {\n _titleCase = false;\n }\n\n if (options.useExistingGa) {\n return;\n }\n }\n\n if (options && options.gaOptions) {\n internalGa('create', gaTrackingID, options.gaOptions);\n } else {\n internalGa('create', gaTrackingID, 'auto');\n }\n}\n\nexport function initialize(configsOrTrackingId, options) {\n if (options && options.testMode === true) {\n _testMode = true;\n } else {\n if (_isNotBrowser) {\n return false;\n }\n\n if (!options || options.standardImplementation !== true) loadGA(options);\n }\n\n _alwaysSendToDefaultTracker = options && typeof options.alwaysSendToDefaultTracker === 'boolean' ? options.alwaysSendToDefaultTracker : true;\n\n if (Array.isArray(configsOrTrackingId)) {\n configsOrTrackingId.forEach(function (config) {\n if (_typeof(config) !== 'object') {\n warn('All configs must be an object');\n return;\n }\n\n _initialize(config.trackingId, config);\n });\n } else {\n _initialize(configsOrTrackingId, options);\n }\n\n return true;\n}\n/**\n * ga:\n * Returns the original GA object.\n */\n\nexport function ga() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (args.length > 0) {\n internalGa.apply(void 0, args);\n\n if (_debug) {\n log('called ga(\\'arguments\\');');\n log(\"with arguments: \".concat(JSON.stringify(args)));\n }\n }\n\n return window.ga;\n}\n/**\n * set:\n * GA tracker set method\n * @param {Object} fieldsObject - a field/value pair or a group of field/value pairs on the tracker\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nexport function set(fieldsObject, trackerNames) {\n if (!fieldsObject) {\n warn('`fieldsObject` is required in .set()');\n return;\n }\n\n if (_typeof(fieldsObject) !== 'object') {\n warn('Expected `fieldsObject` arg to be an Object');\n return;\n }\n\n if (Object.keys(fieldsObject).length === 0) {\n warn('empty `fieldsObject` given to .set()');\n }\n\n _gaCommand(trackerNames, 'set', fieldsObject);\n\n if (_debug) {\n log('called ga(\\'set\\', fieldsObject);');\n log(\"with fieldsObject: \".concat(JSON.stringify(fieldsObject)));\n }\n}\n/**\n * send:\n * Clone of the low level `ga.send` method\n * WARNING: No validations will be applied to this\n * @param {Object} fieldObject - field object for tracking different analytics\n * @param {Array} trackerNames - trackers to send the command to\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nexport function send(fieldObject, trackerNames) {\n _gaCommand(trackerNames, 'send', fieldObject);\n\n if (_debug) {\n log('called ga(\\'send\\', fieldObject);');\n log(\"with fieldObject: \".concat(JSON.stringify(fieldObject)));\n log(\"with trackers: \".concat(JSON.stringify(trackerNames)));\n }\n}\n/**\n * pageview:\n * Basic GA pageview tracking\n * @param {String} path - the current page page e.g. '/about'\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n * @param {String} title - (optional) the page title e. g. 'My Website'\n */\n\nexport function pageview(rawPath, trackerNames, title) {\n if (!rawPath) {\n warn('path is required in .pageview()');\n return;\n }\n\n var path = trim(rawPath);\n\n if (path === '') {\n warn('path cannot be an empty string in .pageview()');\n return;\n }\n\n var extraFields = {};\n\n if (title) {\n extraFields.title = title;\n }\n\n if (typeof ga === 'function') {\n _gaCommand(trackerNames, 'send', _objectSpread({\n hitType: 'pageview',\n page: path\n }, extraFields));\n\n if (_debug) {\n log('called ga(\\'send\\', \\'pageview\\', path);');\n var extraLog = '';\n\n if (title) {\n extraLog = \" and title: \".concat(title);\n }\n\n log(\"with path: \".concat(path).concat(extraLog));\n }\n }\n}\n/**\n * modalview:\n * a proxy to basic GA pageview tracking to consistently track\n * modal views that are an equivalent UX to a traditional pageview\n * @param {String} modalName e.g. 'add-or-edit-club'\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nexport function modalview(rawModalName, trackerNames) {\n if (!rawModalName) {\n warn('modalName is required in .modalview(modalName)');\n return;\n }\n\n var modalName = removeLeadingSlash(trim(rawModalName));\n\n if (modalName === '') {\n warn('modalName cannot be an empty string or a single / in .modalview()');\n return;\n }\n\n if (typeof ga === 'function') {\n var path = \"/modal/\".concat(modalName);\n\n _gaCommand(trackerNames, 'send', 'pageview', path);\n\n if (_debug) {\n log('called ga(\\'send\\', \\'pageview\\', path);');\n log(\"with path: \".concat(path));\n }\n }\n}\n/**\n * timing:\n * GA timing\n * @param args.category {String} required\n * @param args.variable {String} required\n * @param args.value {Int} required\n * @param args.label {String} required\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nexport function timing() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n category = _ref.category,\n variable = _ref.variable,\n value = _ref.value,\n label = _ref.label;\n\n var trackerNames = arguments.length > 1 ? arguments[1] : undefined;\n\n if (typeof ga === 'function') {\n if (!category || !variable || !value || typeof value !== 'number') {\n warn('args.category, args.variable ' + 'AND args.value are required in timing() ' + 'AND args.value has to be a number');\n return;\n } // Required Fields\n\n\n var fieldObject = {\n hitType: 'timing',\n timingCategory: _format(category),\n timingVar: _format(variable),\n timingValue: value\n };\n\n if (label) {\n fieldObject.timingLabel = _format(label);\n }\n\n send(fieldObject, trackerNames);\n }\n}\n/**\n * event:\n * GA event tracking\n * @param args.category {String} required\n * @param args.action {String} required\n * @param args.label {String} optional\n * @param args.value {Int} optional\n * @param args.nonInteraction {boolean} optional\n * @param args.transport {string} optional\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nexport function event() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n category = _ref2.category,\n action = _ref2.action,\n label = _ref2.label,\n value = _ref2.value,\n nonInteraction = _ref2.nonInteraction,\n transport = _ref2.transport,\n args = _objectWithoutProperties(_ref2, [\"category\", \"action\", \"label\", \"value\", \"nonInteraction\", \"transport\"]);\n\n var trackerNames = arguments.length > 1 ? arguments[1] : undefined;\n\n if (typeof ga === 'function') {\n // Simple Validation\n if (!category || !action) {\n warn('args.category AND args.action are required in event()');\n return;\n } // Required Fields\n\n\n var fieldObject = {\n hitType: 'event',\n eventCategory: _format(category),\n eventAction: _format(action)\n }; // Optional Fields\n\n if (label) {\n fieldObject.eventLabel = _format(label);\n }\n\n if (typeof value !== 'undefined') {\n if (typeof value !== 'number') {\n warn('Expected `args.value` arg to be a Number.');\n } else {\n fieldObject.eventValue = value;\n }\n }\n\n if (typeof nonInteraction !== 'undefined') {\n if (typeof nonInteraction !== 'boolean') {\n warn('`args.nonInteraction` must be a boolean.');\n } else {\n fieldObject.nonInteraction = nonInteraction;\n }\n }\n\n if (typeof transport !== 'undefined') {\n if (typeof transport !== 'string') {\n warn('`args.transport` must be a string.');\n } else {\n if (['beacon', 'xhr', 'image'].indexOf(transport) === -1) {\n warn('`args.transport` must be either one of these values: `beacon`, `xhr` or `image`');\n }\n\n fieldObject.transport = transport;\n }\n }\n\n Object.keys(args).filter(function (key) {\n return key.substr(0, 'dimension'.length) === 'dimension';\n }).forEach(function (key) {\n fieldObject[key] = args[key];\n });\n Object.keys(args).filter(function (key) {\n return key.substr(0, 'metric'.length) === 'metric';\n }).forEach(function (key) {\n fieldObject[key] = args[key];\n }); // Send to GA\n\n send(fieldObject, trackerNames);\n }\n}\n/**\n * exception:\n * GA exception tracking\n * @param args.description {String} optional\n * @param args.fatal {boolean} optional\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\n\nexport function exception(_ref3, trackerNames) {\n var description = _ref3.description,\n fatal = _ref3.fatal;\n\n if (typeof ga === 'function') {\n // Required Fields\n var fieldObject = {\n hitType: 'exception'\n }; // Optional Fields\n\n if (description) {\n fieldObject.exDescription = _format(description);\n }\n\n if (typeof fatal !== 'undefined') {\n if (typeof fatal !== 'boolean') {\n warn('`args.fatal` must be a boolean.');\n } else {\n fieldObject.exFatal = fatal;\n }\n } // Send to GA\n\n\n send(fieldObject, trackerNames);\n }\n}\nexport var plugin = {\n /**\n * require:\n * GA requires a plugin\n * @param name {String} e.g. 'ecommerce' or 'myplugin'\n * @param options {Object} optional e.g {path: '/log', debug: true}\n * @param trackerName {String} optional e.g 'trackerName'\n */\n require: function require(rawName, options, trackerName) {\n if (typeof ga === 'function') {\n // Required Fields\n if (!rawName) {\n warn('`name` is required in .require()');\n return;\n }\n\n var name = trim(rawName);\n\n if (name === '') {\n warn('`name` cannot be an empty string in .require()');\n return;\n }\n\n var requireString = trackerName ? \"\".concat(trackerName, \".require\") : 'require'; // Optional Fields\n\n if (options) {\n if (_typeof(options) !== 'object') {\n warn('Expected `options` arg to be an Object');\n return;\n }\n\n if (Object.keys(options).length === 0) {\n warn('Empty `options` given to .require()');\n }\n\n ga(requireString, name, options);\n\n if (_debug) {\n log(\"called ga('require', '\".concat(name, \"', \").concat(JSON.stringify(options)));\n }\n } else {\n ga(requireString, name);\n\n if (_debug) {\n log(\"called ga('require', '\".concat(name, \"');\"));\n }\n }\n }\n },\n\n /**\n * execute:\n * GA execute action for plugin\n * Takes variable number of arguments\n * @param pluginName {String} e.g. 'ecommerce' or 'myplugin'\n * @param action {String} e.g. 'addItem' or 'myCustomAction'\n * @param actionType {String} optional e.g. 'detail'\n * @param payload {Object} optional e.g { id: '1x5e', name : 'My product to track' }\n */\n execute: function execute(pluginName, action) {\n var payload;\n var actionType;\n\n if ((arguments.length <= 2 ? 0 : arguments.length - 2) === 1) {\n payload = arguments.length <= 2 ? undefined : arguments[2];\n } else {\n actionType = arguments.length <= 2 ? undefined : arguments[2];\n payload = arguments.length <= 3 ? undefined : arguments[3];\n }\n\n if (typeof ga === 'function') {\n if (typeof pluginName !== 'string') {\n warn('Expected `pluginName` arg to be a String.');\n } else if (typeof action !== 'string') {\n warn('Expected `action` arg to be a String.');\n } else {\n var command = \"\".concat(pluginName, \":\").concat(action);\n payload = payload || null;\n\n if (actionType && payload) {\n ga(command, actionType, payload);\n\n if (_debug) {\n log(\"called ga('\".concat(command, \"');\"));\n log(\"actionType: \\\"\".concat(actionType, \"\\\" with payload: \").concat(JSON.stringify(payload)));\n }\n } else if (payload) {\n ga(command, payload);\n\n if (_debug) {\n log(\"called ga('\".concat(command, \"');\"));\n log(\"with payload: \".concat(JSON.stringify(payload)));\n }\n } else {\n ga(command);\n\n if (_debug) {\n log(\"called ga('\".concat(command, \"');\"));\n }\n }\n }\n }\n }\n};\n/**\n * outboundLink:\n * GA outboundLink tracking\n * @param args.label {String} e.g. url, or 'Create an Account'\n * @param {function} hitCallback - Called after processing a hit.\n */\n\nexport function outboundLink(args, hitCallback, trackerNames) {\n if (typeof hitCallback !== 'function') {\n warn('hitCallback function is required');\n return;\n }\n\n if (typeof ga === 'function') {\n // Simple Validation\n if (!args || !args.label) {\n warn('args.label is required in outboundLink()');\n return;\n } // Required Fields\n\n\n var fieldObject = {\n hitType: 'event',\n eventCategory: 'Outbound',\n eventAction: 'Click',\n eventLabel: _format(args.label)\n };\n var safetyCallbackCalled = false;\n\n var safetyCallback = function safetyCallback() {\n // This prevents a delayed response from GA\n // causing hitCallback from being fired twice\n safetyCallbackCalled = true;\n hitCallback();\n }; // Using a timeout to ensure the execution of critical application code\n // in the case when the GA server might be down\n // or an ad blocker prevents sending the data\n // register safety net timeout:\n\n\n var t = setTimeout(safetyCallback, 250);\n\n var clearableCallbackForGA = function clearableCallbackForGA() {\n clearTimeout(t);\n\n if (!safetyCallbackCalled) {\n hitCallback();\n }\n };\n\n fieldObject.hitCallback = clearableCallbackForGA; // Send to GA\n\n send(fieldObject, trackerNames);\n } else {\n // if ga is not defined, return the callback so the application\n // continues to work as expected\n setTimeout(hitCallback, 0);\n }\n}\nexport var testModeAPI = TestModeAPI;\nexport default {\n initialize: initialize,\n ga: ga,\n set: set,\n send: send,\n pageview: pageview,\n modalview: modalview,\n timing: timing,\n event: event,\n exception: exception,\n plugin: plugin,\n outboundLink: outboundLink,\n testModeAPI: TestModeAPI\n};","export default function (options) {\n var gaAddress = 'https://www.google-analytics.com/analytics.js';\n\n if (options && options.gaAddress) {\n gaAddress = options.gaAddress;\n } else if (options && options.debug) {\n gaAddress = 'https://www.google-analytics.com/analytics_debug.js';\n } // https://developers.google.com/analytics/devguides/collection/analyticsjs/\n\n /* eslint-disable */\n\n\n (function (i, s, o, g, r, a, m) {\n i['GoogleAnalyticsObject'] = r;\n i[r] = i[r] || function () {\n (i[r].q = i[r].q || []).push(arguments);\n }, i[r].l = 1 * new Date();\n a = s.createElement(o), m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', gaAddress, 'ga');\n /* eslint-enable */\n\n}","export default function removeLeadingSlash(string) {\n if (string.substring(0, 1) === '/') {\n return string.substring(1);\n }\n\n return string;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport UnboundOutboundLink from './components/OutboundLink';\nimport * as Defaults from './core';\nexport var initialize = Defaults.initialize;\nexport var ga = Defaults.ga;\nexport var set = Defaults.set;\nexport var send = Defaults.send;\nexport var pageview = Defaults.pageview;\nexport var modalview = Defaults.modalview;\nexport var timing = Defaults.timing;\nexport var event = Defaults.event;\nexport var exception = Defaults.exception;\nexport var plugin = Defaults.plugin;\nexport var outboundLink = Defaults.outboundLink;\nexport var testModeAPI = Defaults.testModeAPI;\nUnboundOutboundLink.origTrackLink = UnboundOutboundLink.trackLink;\nUnboundOutboundLink.trackLink = Defaults.outboundLink;\nexport var OutboundLink = UnboundOutboundLink;\nexport default _objectSpread({}, Defaults, {\n OutboundLink: OutboundLink\n});","enum GlassesEnvironment {\n PROD = 'PROD',\n PROD_LEGACY = 'PROD_LEGACY',\n TEST = 'TEST',\n TEST_LEGACY = 'TEST_LEGACY',\n QA_GLTF_PROD = 'QA_GLTF_PROD',\n QA_GLTF_TEST = 'QA_GLTF_TEST',\n QA_B3D_PROD = 'QA_B3D_PROD',\n QA_B3D_TEST = 'QA_B3D_TEST',\n MOCK = 'MOCK',\n // environments for distributor developments\n DISTRIBUTOR_VALIDATION_STAGING = 'DISTRIBUTOR_VALIDATION_STAGING',\n DISTRIBUTOR_APPROVATION_STAGING = 'DISTRIBUTOR_APPROVATION_STAGING',\n DISTRIBUTOR_VALIDATION_PRODUCTION = 'DISTRIBUTOR_VALIDATION_PRODUCTION',\n DISTRIBUTOR_APPROVATION_PRODUCTION = 'DISTRIBUTOR_APPROVATION_PRODUCTION',\n}\n\nexport {\n GlassesEnvironment\n};\n","import { GlassesEnvironment } from '../constants/Environment';\n\ninterface EnvironmentConfig {\n name: string;\n catalogHost: string;\n transitionHost: string;\n b3dHost: string;\n gltfHost: string;\n gltfPointer: string;\n customDistributorHost: string;\n customDistributorGetPermutation: string;\n customDistributorKey: string;\n assetType: 'ZIPPED' | 'SEPARATE';\n}\n\nconst hosts: {\n [key in GlassesEnvironment]: EnvironmentConfig;\n} = {\n MOCK: {\n name: 'PROD',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionHost: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://vmcore.luxottica.com',\n gltfHost: 'https://mobile-catalogue-3d-model-test.s3-accelerate.amazonaws.com/public/vto-poc',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'HnqGNWeO.Px2v1cUrm3ffk6gC0OOdTgJRoaOfxClC',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'SEPARATE'\n },\n PROD: {\n name: 'PROD',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionHost: 'https://gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://vmcore.luxottica.com',\n gltfHost: 'https://vmcore.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'HnqGNWeO.Px2v1cUrm3ffk6gC0OOdTgJRoaOfxClC',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'SEPARATE'\n },\n PROD_LEGACY: {\n name: 'PROD_LEGACY',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionHost: 'https://gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://vto-3d-assets.luxdeepblue.com',\n gltfHost: 'https://vmcore.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'HnqGNWeO.Px2v1cUrm3ffk6gC0OOdTgJRoaOfxClC',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n TEST: {\n name: 'TEST',\n catalogHost: 'https://vmcore-test.luxottica.com',\n transitionHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://vmcore-test.luxottica.com',\n gltfHost: 'https://vmcore-test.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://staging-distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'bMhq6JPO.nLtuIsJU61lazsX3pnj10iH0wv2Dr7KA',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n TEST_LEGACY: {\n name: 'TEST_LEGACY',\n catalogHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n transitionHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://vto-3d-assets-test.luxdeepblue.com',\n gltfHost: 'https://vmcore-test.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://staging-distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'bMhq6JPO.nLtuIsJU61lazsX3pnj10iH0wv2Dr7KA',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'SEPARATE'\n },\n QA_GLTF_PROD: {\n name: 'QA_PROD',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionHost: 'https://gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://s3.amazonaws.com/vto-3d-assets-qa',\n gltfHost: 'https://gw-api-vtocatalogue.luxdeepblue.com/api/upc/v1',\n gltfPointer: '/pointers/gltf?qa=true',\n customDistributorHost: 'https://distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'HnqGNWeO.Px2v1cUrm3ffk6gC0OOdTgJRoaOfxClC',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n QA_GLTF_TEST: {\n name: 'QA_TEST',\n catalogHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n transitionHost: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://s3.amazonaws.com/vto-3d-assets-qa-test',\n gltfHost: 'https://vmcore-test.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf?qa=true',\n customDistributorHost: 'https://staging-distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'bMhq6JPO.nLtuIsJU61lazsX3pnj10iH0wv2Dr7KA',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n QA_B3D_PROD: {\n name: 'QA_PROD',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionHost: 'https://gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://s3.amazonaws.com/vto-3d-assets-qa',\n gltfHost: 'https://gw-api-vtocatalogue.luxdeepblue.com/api/upc/v1',\n gltfPointer: '/pointers/gltf?qa=true',\n customDistributorHost: 'https://distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'HnqGNWeO.Px2v1cUrm3ffk6gC0OOdTgJRoaOfxClC',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n QA_B3D_TEST: {\n name: 'QA_TEST',\n catalogHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n transitionHost: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://s3.amazonaws.com/vto-3d-assets-qa-test',\n gltfHost: 'https://test-api-vtocatalogue.luxdeepblue.com/api/upc/v1',\n gltfPointer: '/pointers/gltf?qa=true',\n customDistributorHost: 'https://staging-distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'bMhq6JPO.nLtuIsJU61lazsX3pnj10iH0wv2Dr7KA',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n // environments for distributor developments\n DISTRIBUTOR_VALIDATION_STAGING: {\n name: 'DISTRIBUTOR_VALIDATION_STAGING',\n catalogHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n transitionHost: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://distributor-assets-staging.s3.amazonaws.com/validation',\n gltfHost: '',\n gltfPointer: '',\n customDistributorHost: '',\n customDistributorKey: '',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n DISTRIBUTOR_APPROVATION_STAGING: {\n name: 'DISTRIBUTOR_APPROVATION_STAGING',\n catalogHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n transitionHost: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://distributor-assets-staging.s3.amazonaws.com/approvation',\n gltfHost: '',\n gltfPointer: '',\n customDistributorHost: '',\n customDistributorKey: '',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n DISTRIBUTOR_VALIDATION_PRODUCTION: {\n name: 'DISTRIBUTOR_VALIDATION_PRODUCTION',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionHost: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://distributor-assets-production.s3.amazonaws.com/validation',\n gltfHost: '',\n gltfPointer: '',\n customDistributorHost: '',\n customDistributorKey: '',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n DISTRIBUTOR_APPROVATION_PRODUCTION: {\n name: 'DISTRIBUTOR_APPROVATION_PRODUCTION',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionHost: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com',\n b3dHost: 'https://distributor-assets-production.s3.amazonaws.com/approvation',\n gltfHost: '',\n gltfPointer: '',\n customDistributorHost: '',\n customDistributorKey: '',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n }\n};\n\nconst getEnvironmentConfig = (env: GlassesEnvironment | undefined): EnvironmentConfig => {\n return (env) ? hosts[env] : hosts.PROD;\n};\n\nexport { getEnvironmentConfig, EnvironmentConfig };\n","import { CatalogConfiguration } from '../interfaces/CatalogConfiguration';\nimport { getEnvironmentConfig } from './GlassesApiConfig';\n\n// const upcsAvailabilityAuthenticatedApi = '/authenticated/upc/{upcs}/availability';\nconst upcsAvailabilityApi = '/api/upc/v3/{upcs}/availability';\n\nconst transitionColorApi = '/api/transition/v3/vocabulary';\n\nconst CatalogueApiConfig = {\n getUpcsAvailabilityApiEndpoint(config: CatalogConfiguration, upcString: string): string {\n const envConfig = getEnvironmentConfig(config.env);\n\n //TODO: remove after prod api is complete\n if (config.env.includes('TEST')) {\n return `${envConfig.catalogHost}${upcsAvailabilityApi}`.replace('{upcs}', upcString);\n } else {\n return (!!config.key) ?\n `${envConfig.catalogHost}${upcsAvailabilityApi}`.replace('{upcs}', upcString)\n :\n `${envConfig.catalogHost}${upcsAvailabilityApi}`.replace('{upcs}', upcString);\n }\n },\n\n getTransitionEndpoint(config: CatalogConfiguration): string {\n const envConfig = getEnvironmentConfig(config.env);\n return `${envConfig.transitionHost}${transitionColorApi}`;\n }\n};\n\nexport { CatalogueApiConfig };\n","import { UpcAvailability } from '../../interfaces/UpcAvailability';\n\nexport const notAvailableResponse = (upc: string): UpcAvailability => {\n return {\n upc: upc,\n available: { 256: false, 512: false },\n transitions: { 256: false, 512: false },\n lods: [],\n glassesType: undefined,\n getUpc: () => upc,\n isAvailable: () => false,\n isTransition: () => false,\n };\n};\n","import { CatalogConfiguration } from '../../interfaces/CatalogConfiguration';\nimport { GlassesType, UpcAvailability } from '../../interfaces/UpcAvailability';\n\nconst getGlassesType = (lods: number[], config: CatalogConfiguration, isAvailable: boolean): GlassesType | undefined => {\n // TODO: remove this. To support MOCK env is necessary to return GLTF as glasses type in case the upc is not supported\n return (lods.includes(1) || config.env === 'MOCK' && !isAvailable) ? 'GLTF' : 'B3D';\n};\n\nexport const standardResponse = (catalogResponse: CatalogResponse, upc: string, config: CatalogConfiguration): UpcAvailability => {\n\n const lods = (!!catalogResponse?.lods) ? catalogResponse.lods : [];\n \n const isAvailable = catalogResponse.resolutions.includes('PX_256') || catalogResponse.resolutions.includes('PX_512') || lods.length > 0;\n\n const isTransition = catalogResponse.transitionsResolutions.includes('PX_256')\n || catalogResponse.transitionsResolutions.includes('PX_512');\n \n const glassesType = getGlassesType(lods, config, isAvailable);\n\n return {\n upc: upc,\n available: {\n '256': catalogResponse.resolutions.includes('PX_256'),\n '512': catalogResponse.resolutions.includes('PX_512')\n },\n transitions: {\n '256': catalogResponse.transitionsResolutions.includes('PX_256'),\n '512': catalogResponse.transitionsResolutions.includes('PX_512'),\n },\n lods,\n glassesType,\n getUpc: () => upc,\n isAvailable: () => isAvailable,\n isTransition: () => isTransition,\n };\n};\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { UpcAvailability } from './interfaces/UpcAvailability';\nimport { name, version } from '../package.json';\nimport { TransitionLens } from './interfaces/TransitionLens';\nimport { CatalogConfiguration } from './interfaces/CatalogConfiguration';\nimport { CatalogueApiConfig } from './config/CatalogueApiConfig';\nimport { notAvailableResponse } from './helpers/UpcAvailabilityResponse/NotAvailable';\nimport { qaToolAvailability, qaToolMultipleAvailability } from './helpers/UpcAvailabilityResponse/QATool';\nimport { standardResponse } from './helpers/UpcAvailabilityResponse/Standard';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'CatalogService');\n\nconst fetchCatalogResponse = (\n config: CatalogConfiguration,\n upc: string\n): Promise => {\n\n const apiEndpoint = CatalogueApiConfig.getUpcsAvailabilityApiEndpoint(config, upc);\n const requestInit: RequestInit = {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n ...(config.key && { 'x-api-key': config.key })\n },\n mode: 'cors',\n referrerPolicy: 'unsafe-url',\n };\n return fetch(apiEndpoint, requestInit);\n};\n\nconst CatalogService = {\n getUpcAvailability(\n config: CatalogConfiguration,\n upc: string\n ): Promise {\n\n // inside the QA tool there's no UPC availability API for unpublished assets\n if (config.env.includes('QA')) {\n return Promise.resolve(qaToolAvailability(upc, config));\n }\n\n // otherwise we fetch the answer from remote\n return fetchCatalogResponse(config, upc)\n .then((response)=> {\n if (response.ok) {\n return response.json();\n }\n throw new Error(`catalog failed to respond. Response status: ${response.status}`);\n\n }).then((json: CatalogResponses) => {\n if (!!json[upc]) {\n return standardResponse(json[upc], upc, config);\n }\n return notAvailableResponse(upc);\n });\n },\n\n /**\n * \n * @param config \n * @param upc \n * @returns an array with all the availabilites already extracted from the promise\n */\n getMultipleUpcAvailability(\n config: CatalogConfiguration,\n upc: string\n ): Promise {\n\n // inside the QA tool there's no UPC availability API for unpublished assets\n if (config.env.includes('QA')) {\n return Promise.resolve(qaToolMultipleAvailability(upc, config));\n }\n\n // otherwise we fetch the answer from remote\n return fetchCatalogResponse(config, upc)\n .then((response)=> {\n if (response.ok) {\n return response.json();\n }\n throw new Error(`catalog failed to respond. Response status: ${response.status}`);\n\n }).then((json: CatalogResponses) => {\n\n const upcs = upc.split(',');\n const response: UpcAvailability[] = [];\n upcs.forEach((upc) => {\n if (!!json[upc]) {\n response.push(standardResponse(json[upc], upc, config));\n return;\n }\n response.push(notAvailableResponse(upc));\n });\n\n return response;\n });\n },\n\n downloadTransitionLenses(\n config: CatalogConfiguration,\n ): Promise<{ [name: string]: TransitionLens }> {\n\n const apiEndpoint = CatalogueApiConfig.getTransitionEndpoint(config);\n return fetch(apiEndpoint).then((response) => {\n return response.json();\n }).then((json: (TransitionLens & {name: string})[]) => {\n try {\n const result: {\n [name: string]: TransitionLens\n } = {};\n\n (json).forEach((color) => {\n result[color.name] = color;\n });\n return result;\n\n } catch (e) {\n logger.error(e);\n }\n return {};\n });\n }\n};\n\nexport {\n CatalogService,\n};\n","import { CatalogConfiguration } from '../../interfaces/CatalogConfiguration';\nimport { UpcAvailability } from '../../interfaces/UpcAvailability';\n\n // inside the QA tool every asset is considered fully available\nexport const qaToolAvailability = (upc: string, config: CatalogConfiguration): UpcAvailability => {\n return {\n upc: upc,\n available: { 256: true, 512: true },\n transitions: { 256: true, 512: true },\n lods: [0, 1, 2],\n getUpc: () => upc,\n // we need somehow to split between b3d and gltf files somehow\n glassesType: config.env.includes('GLTF') ? 'GLTF' : 'B3D',\n isAvailable: () => true,\n isTransition: () => true,\n };\n};\n\nexport const qaToolMultipleAvailability = (upc: string, config: CatalogConfiguration): UpcAvailability[] => {\n return upc.split(',').map((upc) => {\n return {\n upc: upc,\n available: { 256: true, 512: true },\n transitions: { 256: true, 512: true },\n lods: [0, 1, 2],\n getUpc: () => upc,\n // we need somehow to split between b3d and gltf files somehow\n glassesType: config.env.includes('GLTF') ? 'GLTF' : 'B3D',\n isAvailable: () => true,\n isTransition: () => true,\n };\n });\n};","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { UpcAvailability } from './interfaces/UpcAvailability';\nimport { name, version } from '../package.json';\nimport { TransitionLens } from './interfaces/TransitionLens';\nimport { CatalogConfiguration } from './interfaces/CatalogConfiguration';\nimport { CatalogService } from './CatalogService';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'Catalog');\n\nconst Catalog = {\n getUpcAvailability(\n config: CatalogConfiguration,\n upc: string\n ): Promise {\n\n logger.info('getUpcAvailability for {}', upc);\n return CatalogService.getUpcAvailability(config, upc);\n },\n\n /**\n * This method optimise the network calls\n * @param config { env: GlassesEnvironment; key?: string; } < please always pass your key, it will become mandatory soon\n * @param upcs you can spread out an array of upcs\n * @returns \n */\n getMultipleUpcAvailability(\n config: CatalogConfiguration,\n ...upcs: string[]\n ): Promise {\n\n const upcList = upcs.reduce((previous, current) => {\n return current+','+previous;\n });\n\n logger.info('getUpcAvailability for {}', upcs);\n return CatalogService.getMultipleUpcAvailability(config, upcList);\n },\n\n // getUpcsAvailability(\n // config: CatalogConfiguration,\n // ...upcs: string[]\n // ): Promise<{ [upc: string]: UpcAvailability }> {\n // return CatalogService.getUpcsAvailability(config, ...upcs);\n // },\n\n downloadTransitionLenses(\n config: CatalogConfiguration\n ): Promise<{ [name: string]: TransitionLens }> {\n\n logger.info('downloadTransitionLenses');\n return CatalogService.downloadTransitionLenses(config);\n }\n};\n\nexport {\n Catalog,\n};\n","import JSZip from 'jszip';\nimport { BasicGLTFAsset } from './interfaces/BasicGLTFAsset';\n\nexport const AssetDecoder = {\n getArrayBuffer(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = reject;\n reader.onload = () => {\n resolve(reader.result as ArrayBuffer);\n };\n reader.readAsArrayBuffer(blob);\n });\n },\n\n getZippedImage(imagePromise: JSZip.JSZipObject): Promise {\n return imagePromise\n .async('blob')\n .then((blob: Blob) => {\n return AssetDecoder.getImage(blob);\n });\n },\n\n getImage(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n img.crossOrigin = '*';\n\n img.onload = () => {\n URL.revokeObjectURL(url);\n resolve(img);\n };\n\n img.onerror = (e) => {\n reject(e);\n };\n\n img.src = url;\n });\n },\n\n getImageBase64(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = reject;\n reader.onload = () => {\n resolve('' + reader.result);\n };\n reader.readAsDataURL(blob);\n });\n },\n\n getZippedGLTF(upc: string, gltfPromise: JSZip.JSZipObject): Promise {\n return gltfPromise\n .async('blob')\n .then((blob: Blob) => {\n return AssetDecoder.getGLTFAsset(upc, blob);\n });\n },\n\n getGLTFAsset(upc: string, blob: Blob): Promise {\n return this.getArrayBuffer(blob)\n .then((arrayBuffer) => {\n return Promise.resolve({\n upc,\n arrayBuffer,\n });\n });\n },\n};\n","enum AppViewSessionKeys {\n GLASSES_OK = 'vm-glasses-ok',\n GLASSES_KO = 'vm-glasses-ko',\n GLASSES_DOWNLOAD_SUCCESS_UPC = '_download_success_upc',\n GLASSES_DOWNLOAD_FAILURE_UPC = '_download_failure_upc',\n GLASSES_DOWNLOAD_SUCCESS_TIME = '_download_success_time_ms',\n GLASSES_DOWNLOAD_FAILURE_TIME = '_download_failure_time_ms',\n GLASSES_DOWNLOAD_FALLBACK_SUCCESS_UPC = '_download_fallback_success_upc',\n GLASSES_DOWNLOAD_FALLBACK_FAILURE_UPC = '_download_fallback_failure_upc',\n GLASSES_DOWNLOAD_FALLBACK_SUCCESS_TIME = '_download_fallback_success_time_ms',\n GLASSES_DOWNLOAD_FALLBACK_FAILURE_TIME = '_download_fallback_failure_time_ms',\n}\n\nexport { AppViewSessionKeys };\n","const assetNames = {\n b3d: 'glasses.b3d',\n transparency: 'mult.jpg',\n shadow: 'shadow-crop.jpg',\n lensMap: 'lens-map.png',\n lensBounds: 'bounds.glb',\n glassesLandmarks: 'landmarks.glb',\n color: (index: string | number) => `color-${index}.jpg`,\n};\n\nexport {\n assetNames,\n};\n","/* \nThis has been written during the mocking phase, during the integration of\nLuxottica's GTLF format. Probably will be useful with third parites glasses.\n*/\n\nexport const gltfDefaults = {\n nosepad_type: 'integrated',\n fitting: 'standard',\n flare: 0.025,\n};\n","const MockAssetData: {\n [key: string]: {\n nosepad_type: string,\n flare: number,\n fitting: string,\n lodNumber: number,\n misc: boolean,\n }\n} = {\n 'RB2140ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.023,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'RB2140ROSETTA002': {\n 'nosepad_type': 'integrated',\n 'flare': 0.023,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'RB3025ROSETTA001': {\n 'nosepad_type': 'floating',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': true\n },\n 'OO9406ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.024,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'THIRDPARTYROSETTA-NOGROUP': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'THIRDPARTYROSETTA-WGROUP': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'dbyd_dbsu5003_8719154814969': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'unofficial_unsf0146_8719154842764': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'unofficial_unsu0094_8719154843136': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'dbyd_dbsm0029_8719154744198': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'fb-quality': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'fb-standard': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'costa00000001': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'goccia00000001': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'frogskins00000001': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'A03116ROSETTA003': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'DG4315BROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'HC6149ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'OO9013ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n '06A2003VROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'OO9102ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'PO3210SROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'RB3016ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n '06S4010ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'OO9406ROSETTA002': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n};\n\nexport {\n MockAssetData,\n};\n","abstract class GenericError extends Error {\n\n private readonly type: string;\n\n public readonly genericError: boolean = true;\n\n constructor(type: string, message: string) {\n super(`${type}: ${message}`);\n this.type = type;\n this.message = message;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n public getType() {\n return this.type;\n }\n\n}\n\nexport { GenericError };\n","import { GenericError } from './GenericError';\n\nclass GlassesDownloadError extends GenericError {\n constructor(readonly upc: string) {\n super('GlassesDownloadError', `glasses for upc ${upc} download failed`);\n }\n}\n\nexport { GlassesDownloadError };\n","import { GenericError } from './GenericError';\n\nclass GlassesDownloadForbiddenError extends GenericError {\n constructor(readonly upc: string) {\n super('GlassesDownloadForbiddenError', `glasses archive for upc ${upc} download forbidden`);\n }\n}\n\nexport { GlassesDownloadForbiddenError };\n","import { GenericError } from './GenericError';\n\nclass GlassesNotFoundError extends GenericError {\n constructor(readonly upc: string) {\n super('GlassesNotFoundError', `glasses archive for upc ${upc} not found`);\n }\n}\n\nexport { GlassesNotFoundError };\n","const isDistributorAsset = (upc: string): boolean => {\n return upc.startsWith('TKN~');\n};\n\nconst isQADistributorAsset = (upc: string): boolean => {\n // sample QA distributor UPC: 0OO9290CP-FRAME_SR005\n const dash = upc.split('-').length > 1;\n const underscore = upc.split('_').length > 1;\n\n return dash && underscore;\n};\n\nconst distributorBasename = (upc: string): string => {\n // sample distributor UPC: 0OO9290CP-FRAME_SR005\n return upc.split('-')[0];\n};\n\n // distributor can use tokens with a / (slash) in the name\n // the / is escaped by VM clients, all the distributor APIs works with the escaped character %2F\n // eg: TKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F13AA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n // inside the asset zip this slash is replaced with a dash -\nconst distributorFolderName = (upc: string): string => {\n return upc.replace(/(%2F)/gm, '-');\n};\n\nexport { isDistributorAsset, isQADistributorAsset, distributorBasename,\n distributorFolderName\n};\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport JSZip from 'jszip';\nimport { name, version } from '../package.json';\nimport { AssetDecoder } from './AssetDecoder';\nimport { AssetResolution } from './interfaces/AssetResolution';\nimport { assetNames } from './constants/AssetNames';\nimport { B3dAsset } from './interfaces/B3dAsset';\nimport { distributorFolderName } from './helpers/AssetHelper';\nimport { BasicGLTFAsset } from './interfaces/BasicGLTFAsset';\nimport { GlassesDownloadError } from './error/GlassesDownloadError';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'GlassesExtractor');\n\nconst ALL_TEXTURES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];\n\nclass GlassesExtractor {\n\n public unzip(\n upc: string,\n glassesZip: Blob,\n resolution: AssetResolution,\n singleTexture: number | undefined,\n ): Promise {\n const colorIndexes = (typeof singleTexture === 'number') ? [singleTexture] : ALL_TEXTURES;\n\n return this.unzipGlasses(\n upc,\n glassesZip,\n colorIndexes,\n resolution);\n }\n\n private unzipGlasses(\n upc: string,\n glassesZip: Blob,\n colorIndexes: number[],\n resolution: AssetResolution\n ): Promise {\n const time1 = performance.now();\n let time2 = 0;\n const jszip = new JSZip();\n return jszip.loadAsync(\n glassesZip\n ).then(() => {\n logger.info('glasses zip [upc={}] loaded in {} ms', upc, performance.now() - time1);\n time2 = performance.now();\n return this.extractFilesFromZipArchive(jszip, upc, colorIndexes);\n }).then((glassesExtracted: Array) => {\n logger.info('glasses zip [upc={}] opened in {} ms', upc, performance.now() - time2);\n const glasses = this.createGlassesDataFromExtractedArchive(upc, glassesExtracted, resolution, colorIndexes);\n return glasses;\n });\n }\n\n private extractFilesFromZipArchive(jszip: JSZip, zipUpc: string, colorIndexes: number[]): Promise> {\n const promises: Promise[] = [];\n const folderName: string = distributorFolderName(zipUpc);\n promises.push(this.extractB3D(jszip, folderName));\n promises.push(\n this.extractMult(jszip, folderName),\n this.extractShadow(jszip, folderName),\n this.extractLensMap(jszip, folderName),\n this.extractBoundingBoxes(jszip, folderName),\n this.extractLandmarks(jszip, folderName),\n );\n\n this.extractColors(jszip, folderName, colorIndexes).forEach((promise) => {\n promises.push(promise);\n });\n return Promise.all(promises);\n }\n\n private extractColors(jszip: JSZip, folderName: string, colorIndexes: number[]) {\n const promises: Array> = [];\n colorIndexes.map((i) => {\n const time1 = performance.now();\n const zipFolder = jszip.folder(folderName);\n if (!zipFolder) {\n throw new GlassesDownloadError(`${folderName} folder does not exists`);\n }\n const file = zipFolder.file(assetNames.color(i));\n if (!file) {\n throw new GlassesDownloadError(`${assetNames.color(i)} file does not exists`);\n }\n const colorPromise = AssetDecoder.getZippedImage(file);\n colorPromise.then((color) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('texture {} extracted in {} ms from upc {}: (length={})', i, ttime, folderName, color.src.length);\n });\n promises.push(colorPromise);\n });\n return promises;\n }\n\n private extractMult(jszip: JSZip, folderName: string) {\n const zipFolder = jszip.folder(folderName);\n if (!zipFolder) {\n throw new GlassesDownloadError(`${folderName} folder does not exists`);\n }\n const file = zipFolder.file(assetNames.transparency);\n if (!file) {\n throw new GlassesDownloadError(`${assetNames.transparency} file does not exists`);\n }\n const multPromise = AssetDecoder.getZippedImage(file);\n const time1 = performance.now();\n multPromise.then((mult) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('mult extracted in {} ms from upc {}: (length={})', ttime, folderName, mult.src.length);\n });\n return multPromise;\n }\n\n private extractShadow(jszip: JSZip, folderName: string) {\n const zipFolder = jszip.folder(folderName);\n if (!zipFolder) {\n throw new GlassesDownloadError(`${folderName} folder does not exists`);\n }\n const file = zipFolder.file(assetNames.shadow);\n if (!file) {\n throw new GlassesDownloadError(`${assetNames.shadow} file does not exists`);\n }\n const shadowPromise = AssetDecoder.getZippedImage(file);\n const time1 = performance.now();\n shadowPromise.then((shadow) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('shadow extracted in {} ms from upc {}: (length={})', ttime, folderName, shadow.src.length);\n });\n return shadowPromise;\n }\n\n // lensmaps, boundig boxes, and landmarks are optional and are not always present in zip file\n private extractLensMap(jszip: JSZip, folderName: string) {\n const zipFolder = jszip.folder(folderName);\n if (!zipFolder) {\n throw new GlassesDownloadError(`${folderName} folder does not exists`);\n }\n const lensmapFile = zipFolder.file(assetNames.lensMap);\n if (!!lensmapFile) {\n const lensmapPromise = AssetDecoder.getZippedImage(lensmapFile);\n const time1 = performance.now();\n lensmapPromise.then((lensmap: any) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('lens map extracted in {} ms from upc {}: (length={})', ttime, folderName, lensmap.byteLength);\n });\n return lensmapPromise;\n }\n return Promise.resolve(undefined);\n }\n\n // lensmaps, boundig boxes, and landmarks are optional and are not always present in zip file\n private extractBoundingBoxes(jszip: JSZip, folderName: string) {\n const zipFolder = jszip.folder(folderName);\n if (!zipFolder) {\n throw new GlassesDownloadError(`${folderName} folder does not exists`);\n }\n const lensBoundsFile = zipFolder.file(assetNames.lensBounds);\n if (!!lensBoundsFile) {\n const lensBoundsPromise = AssetDecoder.getZippedGLTF(folderName, lensBoundsFile);\n const time1 = performance.now();\n lensBoundsPromise.then((bounds: any) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('lens bounds extracted in {} ms from upc {}: (length={})', ttime, folderName, bounds.byteLength);\n });\n return lensBoundsPromise;\n }\n return Promise.resolve(undefined);\n }\n\n // lensmaps, boundig boxes, and landmarks are optional and are not always present in zip file\n private extractLandmarks(jszip: JSZip, folderName: string) {\n const landmarksFile = jszip.folder(folderName)!.file(assetNames.glassesLandmarks);\n if (!!landmarksFile) {\n const landmarksPromise = AssetDecoder.getZippedGLTF(folderName, landmarksFile);\n const time1 = performance.now();\n landmarksPromise.then((landmarks: any) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('landmarks extracted in {} ms from upc {}: (length={})', ttime, folderName, landmarks.byteLength);\n });\n return landmarksPromise;\n }\n return Promise.resolve(undefined);\n }\n\n private extractB3D(jszip: JSZip, folderName: string) {\n const b3dPromise = jszip.folder(folderName)!.file(assetNames.b3d)!.async('arraybuffer');\n const time1 = performance.now();\n b3dPromise.then((b3d: any) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('model extracted in {} ms from upc {}: (length={})', ttime, folderName, b3d.byteLength);\n });\n return b3dPromise;\n }\n\n private createGlassesDataFromExtractedArchive(\n upc: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n glassesExtracted: any[],\n resolution: AssetResolution,\n textureIndexes: number[]\n ): B3dAsset {\n logger.info('creating glasses from {} items...', glassesExtracted.length);\n const glasses: B3dAsset = {\n objModel: glassesExtracted[0],\n transparency: glassesExtracted[1],\n shadow: glassesExtracted[2],\n lensMap: glassesExtracted[3],\n lensBoundingBox: glassesExtracted[4],\n glassesLandmarks: glassesExtracted[5],\n textures: glassesExtracted.slice(6, 6 + textureIndexes.length),\n upc,\n resolution,\n };\n return glasses;\n }\n\n}\n\nexport { GlassesExtractor };\n","import { RemoteLog, RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../package.json';\nimport { EnvironmentConfig } from './config/GlassesApiConfig';\nimport { GlassesExtractor } from './GlassesExtractor';\nimport { GlassesDownloadError } from './error/GlassesDownloadError';\nimport { GlassesDownloadForbiddenError } from './error/GlassesDownloadForbiddenError';\nimport { GlassesNotFoundError } from './error/GlassesNotFoundError';\nimport { AssetResolution } from './interfaces/AssetResolution';\nimport { B3dAsset } from './interfaces/B3dAsset';\nimport { AppViewSessionKeys } from './remotelog/AppViewSessionKeys';\nimport { distributorBasename, isDistributorAsset, isQADistributorAsset } from './helpers/AssetHelper';\nimport { GenericError } from './error/GenericError';\n/* import { GlassesAsset } from \"./GlassesAsset\"; */\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'ZipDownloader');\n\n/*\n\nSome sample tokens for custom glasses coming from the distributor\n\navailable\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500681_GRIDFK~NULL~50\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500633_GRIDFK~NULL~50\n\nnot available (uses fallback)\nTKN~0RB3592CP~1RB3592061_001...55~NULL~1TE3941A00_A1812.AA~1LSRB3592_2540..AB~NULL~RBCP..55\nTKN~0RB3592CP~1RB3592061_001...50~NULL~1TE3941A00_A1814.AA~1LSRB3592_1766..AA~NULL~RBCP..50\n\nwith slashes (%2F)\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F13AA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F8GAA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RX6465CP~1RX6465061_2945..51~NULL~1TE4183A00_X523%2FHAA~2064-DE~NULL~RBCP..51~K-MC5~K-RB0\n\n*/\n\n/*\n\nSome sample tokens for custom glasses coming from the distributor\n\navailable\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500681_GRIDFK~NULL~50\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500633_GRIDFK~NULL~50\n\nnot available (uses fallback)\nTKN~0RB3592CP~1RB3592061_001...55~NULL~1TE3941A00_A1812.AA~1LSRB3592_2540..AB~NULL~RBCP..55\nTKN~0RB3592CP~1RB3592061_001...50~NULL~1TE3941A00_A1814.AA~1LSRB3592_1766..AA~NULL~RBCP..50\n\nwith slashes (%2F)\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F13AA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F8GAA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RX6465CP~1RX6465061_2945..51~NULL~1TE4183A00_X523%2FHAA~2064-DE~NULL~RBCP..51~K-MC5~K-RB0\n\n*/\n\n/*\n\nSome sample tokens for custom glasses coming from the distributor\n\navailable\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500681_GRIDFK~NULL~50\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500633_GRIDFK~NULL~50\n\nnot available (uses fallback)\nTKN~0RB3592CP~1RB3592061_001...55~NULL~1TE3941A00_A1812.AA~1LSRB3592_2540..AB~NULL~RBCP..55\nTKN~0RB3592CP~1RB3592061_001...50~NULL~1TE3941A00_A1814.AA~1LSRB3592_1766..AA~NULL~RBCP..50\n\nwith slashes (%2F)\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F13AA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F8GAA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RX6465CP~1RX6465061_2945..51~NULL~1TE4183A00_X523%2FHAA~2064-DE~NULL~RBCP..51~K-MC5~K-RB0\n\n*/\n\nclass ZipDownloader {\n private remoteLog: RemoteLog = new RemoteLog();\n private static instance: ZipDownloader;\n\n public static getInstance(): ZipDownloader {\n if (!this.instance) {\n this.instance = new ZipDownloader();\n }\n return this.instance;\n }\n\n public downloadZippedGlasses(\n upc: string,\n resolution: AssetResolution,\n singleTexture: number | undefined,\n envConfig: EnvironmentConfig\n ): Promise {\n return new Promise((resolve, reject) => {\n this.tryToDownload(upc, resolution, envConfig)\n .then((blob) => {\n resolve(new GlassesExtractor().unzip(upc, blob, resolution, singleTexture));\n }).catch((e) => {\n logger.error(e);\n reject(new GlassesDownloadError(upc));\n });\n });\n }\n\n private tryToDownload(upc: string, resolution: AssetResolution, envConfig: EnvironmentConfig) {\n const time1 = performance.now();\n\n let glassesUrl: string;\n let requestOptions: RequestInit;\n\n const customDistributorAsset = isDistributorAsset(upc);\n const qaDistributorAsset = isQADistributorAsset(upc);\n\n if (customDistributorAsset) {\n // custom assets requests requires a token, these asset are distributed through a system\n // that automatically generates combinations of custom assets if not available\n glassesUrl = this.getCustomUrl(upc, envConfig);\n requestOptions = {\n headers: {\n 'x-api-key': envConfig.customDistributorKey\n }\n };\n\n } else if (qaDistributorAsset) {\n // this URL is used locally by people that creates the pieces that\n // are combined by above distributor\n glassesUrl = this.getDistributorUrl(upc, envConfig);\n\n } else {\n // this is the classic b3d asset cdn\n glassesUrl = this.getUrl(upc, resolution, envConfig);\n }\n\n let triedLegacyCustom = true;\n const fetchGlasses = (): Promise => {\n return fetch(glassesUrl, requestOptions)\n .then((response: Response) => {\n if (response.ok) {\n logger.debug('glasses archive {} downloaded', response.url);\n const time2 = performance.now();\n const ttime = time2 - time1;\n this.traceDownloadSuccess(upc, ttime);\n return response.blob();\n } else {\n logger.error('glasses download {} failed: [{} {}]',\n response.url, response.status, response.statusText);\n const time2 = performance.now();\n const ttime = time2 - time1;\n this.traceDownloadFailure(upc, ttime);\n switch (response.status) {\n case 403:\n throw new GlassesDownloadForbiddenError(upc);\n case 404:\n throw new GlassesNotFoundError(upc);\n default:\n throw new GlassesDownloadError(upc);\n }\n }\n })\n .catch((reason: GenericError) => {\n logger.error('glasses download {} error {}', glassesUrl, reason);\n\n // if we are downloading a custom asset (TKN) is worth try to download it from legacy bucket\n if (customDistributorAsset && triedLegacyCustom) {\n triedLegacyCustom = false;\n\n logger.debug('try to download the custom asset from legacy bucket');\n glassesUrl = this.getLegacyUrl(upc, '256', envConfig);\n\n // remove the token from the request because it breaks S3 bucket\n requestOptions = {};\n\n return fetchGlasses();\n } else {\n // is possible that the catched error is already been initialised by above promise\n if (reason.genericError) {\n throw reason;\n }\n throw new GlassesDownloadError(glassesUrl);\n }\n });\n };\n\n return new Promise((resolve, reject) => {\n fetchGlasses()\n .then((blob) => {\n if (!!blob) {\n resolve(blob);\n }\n reject(new GlassesDownloadError(`${upc} returned empty blob`));\n })\n .catch((reason: GenericError) => {\n logger.error('glasses download {} error {}', glassesUrl, reason);\n reject(reason);\n });\n });\n }\n\n private getUrl(upc: string, resolution: AssetResolution, envConfig: EnvironmentConfig): string {\n return `${envConfig.b3dHost}/${resolution}/${upc}.zip`;\n }\n\n private getLegacyUrl(upc: string, resolution: AssetResolution, envConfig: EnvironmentConfig): string {\n return `${envConfig.b3dHost}/${resolution}/${upc}.zip`;\n }\n\n private getCustomUrl(tkn: string, envConfig: EnvironmentConfig): string {\n return `${envConfig.customDistributorHost}${envConfig.customDistributorGetPermutation}${tkn}`;\n }\n\n private getDistributorUrl(upc: string, envConfig: EnvironmentConfig): string {\n const baseName = distributorBasename(upc);\n return `${envConfig.b3dHost}/${baseName}/${upc}.zip`;\n }\n\n private traceDownloadSuccess(upc: string, ttime: number) {\n this.remoteLog.sendAppViewSession(\n {\n statusCode: AppViewSessionKeys.GLASSES_OK + AppViewSessionKeys.GLASSES_DOWNLOAD_SUCCESS_UPC,\n statusText: upc,\n }, {\n statusCode: AppViewSessionKeys.GLASSES_OK + AppViewSessionKeys.GLASSES_DOWNLOAD_SUCCESS_TIME,\n statusText: ttime.toString(),\n },\n );\n }\n\n private traceDownloadFailure(upc: string, ttime: number) {\n this.remoteLog.sendAppViewSession(\n {\n statusCode: AppViewSessionKeys.GLASSES_KO + AppViewSessionKeys.GLASSES_DOWNLOAD_FAILURE_UPC,\n statusText: upc,\n }, {\n statusCode: AppViewSessionKeys.GLASSES_KO + AppViewSessionKeys.GLASSES_DOWNLOAD_FAILURE_TIME,\n statusText: ttime.toString(),\n },\n );\n }\n\n}\n\nexport {\n ZipDownloader,\n};\n","import { RemoteLog, RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../package.json';\nimport { AssetDecoder } from './AssetDecoder';\nimport { EnvironmentConfig, getEnvironmentConfig } from './config/GlassesApiConfig';\nimport { assetNames } from './constants/AssetNames';\nimport { GlassesEnvironment } from './constants/Environment';\nimport { gltfDefaults } from './constants/GltfDefault';\nimport { MockAssetData } from './constants/MockAssetData';\nimport { GlassesDownloadError } from './error/GlassesDownloadError';\nimport { GlassesDownloadForbiddenError } from './error/GlassesDownloadForbiddenError';\nimport { GlassesNotFoundError } from './error/GlassesNotFoundError';\nimport { isDistributorAsset } from './helpers/AssetHelper';\nimport { AssetResolution } from './interfaces/AssetResolution';\nimport { B3dAsset } from './interfaces/B3dAsset';\nimport { GltfAssetPointer, GltfLodUrls, GltfResponse, MiscUrl } from './interfaces/GltfAsset';\nimport { AppViewSessionKeys } from './remotelog/AppViewSessionKeys';\nimport { ZipDownloader } from './ZipDownloader';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'GlassesDownloader');\n\n// temporary mock function for GLTF misc/DC assets\nconst miscUrls = (envConfig: EnvironmentConfig, upc: string): MiscUrl => {\n return {\n boundsUrl: `${envConfig.gltfHost}/${upc}/webGL/${upc}_misc/bounds.glb`,\n landmarksUrl: `${envConfig.gltfHost}/${upc}/webGL/${upc}_misc/landmarks.glb`,\n };\n};\n\nclass GlassesDownloader {\n\n private remoteLog: RemoteLog = new RemoteLog();\n\n public downloadGltfGlasses(options: {\n upc: string,\n glassesEnvironment: GlassesEnvironment,\n landmarksAndBBox?: boolean\n }): Promise {\n \n if (options.glassesEnvironment === GlassesEnvironment.MOCK) {\n return Promise.resolve(this.getMockGltfGlassesUrl(options));\n } else {\n const envConfig = getEnvironmentConfig(options.glassesEnvironment);\n const gltfUrl = `${envConfig.gltfHost}/${options.upc}${envConfig.gltfPointer}`;\n\n return fetch(gltfUrl).then((response) => {\n if (response.ok) {\n return response.json();\n } else {\n return Promise.reject(new GlassesDownloadError(`${options.upc} - ${response.status}`));\n }\n }).then((json: GltfResponse) => {\n const assetData = json[options.upc];\n\n // at the moment this is the only way we can understand if the catalog gave us an empty response\n // TODO: ask backend team to improve the answer\n if (!assetData.LOD1 && !assetData.LOD2) {\n return Promise.reject(new GlassesDownloadError(`${options.upc} - missing fundamental LOD`));\n }\n\n const result: GltfAssetPointer = {\n upc: options.upc,\n gltfLodUrls: {},\n nosepadType: assetData.nosepadType,\n fitting: assetData.fitting,\n flare: assetData.flare,\n ...(!!assetData.misc && !!options.landmarksAndBBox && { misc: assetData.misc })\n };\n\n if (!!assetData.LOD0) { result.gltfLodUrls.lod0 = { ...assetData.LOD0 }; }\n if (!!assetData.LOD1) { result.gltfLodUrls.lod1 = { ...assetData.LOD1 }; }\n if (!!assetData.LOD2) { result.gltfLodUrls.lod2 = { ...assetData.LOD2 }; }\n\n return result;\n });\n }\n }\n\n private getMockGltfGlassesUrl(options: {\n upc: string,\n glassesEnvironment: GlassesEnvironment,\n landmarksAndBBox?: boolean\n }): GltfAssetPointer {\n const envConfig = getEnvironmentConfig(options.glassesEnvironment);\n\n const assetNumLods = MockAssetData[options.upc].lodNumber;\n const gltfLodUrls: GltfLodUrls = {};\n \n if (assetNumLods === 1) {\n // asset without lods (third-party)\n gltfLodUrls.lod1 = {\n gltfUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD0/${options.upc}.gltf`,\n upcSiUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD0/${options.upc}_si.json`\n };\n } else {\n gltfLodUrls.lod1 = {\n gltfUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD1/${options.upc}.gltf`,\n upcSiUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD1/${options.upc}_si.json`\n };\n\n if (assetNumLods >= 2) {\n gltfLodUrls.lod2 = {\n gltfUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD2/${options.upc}.gltf`,\n upcSiUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD2/${options.upc}_si.json`\n };\n }\n }\n\n return {\n upc: options.upc,\n gltfLodUrls: gltfLodUrls,\n nosepadType: (!!MockAssetData[options.upc]?.nosepad_type) ? MockAssetData[options.upc].nosepad_type : gltfDefaults.nosepad_type,\n fitting: (!!MockAssetData[options.upc]?.fitting) ? MockAssetData[options.upc].fitting : gltfDefaults.fitting,\n flare: (!!MockAssetData[options.upc]?.flare) ? MockAssetData[options.upc].flare : gltfDefaults.flare,\n misc: !!MockAssetData[options.upc]?.misc &&\n options.landmarksAndBBox !== undefined &&\n options.landmarksAndBBox ?\n miscUrls(envConfig, options.upc) : undefined,\n };\n }\n\n public downloadGlasses(options: {\n upc: string,\n resolution: AssetResolution,\n glassesEnvironment: GlassesEnvironment,\n lensMap?: boolean,\n lensBoundingBoxes?: boolean,\n glassesLandmarks?: boolean,\n singleTexture?: number,\n }): Promise {\n const envConfig = getEnvironmentConfig(options.glassesEnvironment);\n\n if (this.shouldDownloadZip(options.upc, envConfig)) {\n return this.downloadZippedGlasses(\n options.upc,\n options.resolution,\n options.singleTexture,\n (options.lensMap) ? true : false,\n (options.lensBoundingBoxes) ? true : false,\n (options.glassesLandmarks) ? true : false,\n envConfig\n );\n } else {\n return this.downloadSeparatedGlasses(\n options.upc,\n options.resolution,\n options.singleTexture,\n (options.lensMap) ? true : false,\n (options.lensBoundingBoxes) ? true : false,\n (options.glassesLandmarks) ? true : false,\n envConfig\n );\n }\n }\n\n private shouldDownloadZip(upc: string, envConfig: EnvironmentConfig) {\n return isDistributorAsset(upc) || envConfig.assetType === 'ZIPPED';\n }\n\n private downloadZippedGlasses(\n upc: string,\n resolution: AssetResolution = '512',\n singleTexture: number | undefined,\n lensMap: boolean,\n lensBoundingBoxes: boolean,\n glassesLandmarks: boolean,\n envConfig: EnvironmentConfig\n ): Promise {\n\n // prepare lensmap url\n const lensMapUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.lensMap}`;\n const lensBoundsUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.lensBounds}`;\n const glassesLandmarksUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.glassesLandmarks}`;\n const qaToolEnv = ['QA_B3D_PROD', 'QA_GLTF_PROD', 'QA_B3D_TEST', 'QA_GLTF_TEST', 'QA_PROD', 'QA_TEST'];\n\n const qaTool = qaToolEnv.includes(envConfig.name);\n\n // download the zip and lensmap if present\n return Promise.all([\n ZipDownloader.getInstance().downloadZippedGlasses(upc, resolution, singleTexture, envConfig),\n (lensMap && !qaTool) ? this.downloadB3dAsset(lensMapUrl) : Promise.resolve(new Blob()),\n (lensBoundingBoxes && !qaTool) ? this.downloadB3dAsset(lensBoundsUrl) : Promise.resolve(new Blob()),\n (glassesLandmarks && !qaTool) ? this.downloadB3dAsset(glassesLandmarksUrl) : Promise.resolve(new Blob()),\n ]).then((responses) => {\n // load the glasses image\n return Promise.all([\n Promise.resolve(responses[0]),\n (responses[1].size > 0) ? AssetDecoder.getImage(responses[1]) : undefined,\n (responses[2].size > 0) ? AssetDecoder.getGLTFAsset(upc, responses[2]) : undefined,\n (responses[3].size > 0) ? AssetDecoder.getGLTFAsset(upc, responses[3]) : undefined,\n ]);\n }).then((glassesAndLensMap) => {\n // TODO is necessary to track download success?\n\n // compose the asset with lensmaps\n const glassesAsset = glassesAndLensMap[0];\n //if landmarks and bboxes option are false we set relative field undefined\n glassesAsset.lensBoundingBox = lensBoundingBoxes ? glassesAsset.lensBoundingBox : undefined;\n glassesAsset.glassesLandmarks = glassesLandmarks ? glassesAsset.glassesLandmarks : undefined;\n // NOTE: QA tool still uses zipped glasses, if we are outside QA tool new assets must be unzipped\n if (!qaTool) {\n glassesAsset.lensMap = glassesAndLensMap[1];\n glassesAsset.lensBoundingBox = glassesAndLensMap[2];\n glassesAsset.glassesLandmarks = glassesAndLensMap[3];\n }\n return Promise.resolve(glassesAsset);\n });\n }\n\n private downloadSeparatedGlasses(\n upc: string,\n resolution: AssetResolution,\n singleTexture: number | undefined,\n lensMap: boolean,\n lensBoundingBoxes: boolean,\n glassesLandmarks: boolean,\n envConfig: EnvironmentConfig\n ): Promise {\n\n // const normalizedUpc = normalizeSize(normalizeRemix(upc));\n\n const b3dUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.b3d}`;\n const transparencyUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.transparency}`;\n const shadowUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.shadow}`;\n const lensMapUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.lensMap}`;\n const lensBoundsUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.lensBounds}`;\n const glassesLandmarksUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.glassesLandmarks}`;\n\n const textureIndexes = (singleTexture !== undefined) ?\n [singleTexture] : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];\n const textureUrls = textureIndexes.map((x) => {\n return `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.color(x)}`;\n });\n\n const time1 = performance.now();\n\n return Promise.all([\n this.downloadB3dAsset(b3dUrl),\n this.downloadB3dAsset(transparencyUrl),\n this.downloadB3dAsset(shadowUrl),\n (lensMap) ? this.downloadB3dAsset(lensMapUrl) : Promise.resolve(new Blob()),\n (lensBoundingBoxes) ? this.downloadB3dAsset(lensBoundsUrl) : Promise.resolve(new Blob()),\n (glassesLandmarks) ? this.downloadB3dAsset(glassesLandmarksUrl) : Promise.resolve(new Blob()),\n ...textureUrls.map((url) => this.downloadB3dAsset(url))\n ]).then((responses) => {\n return Promise.all([\n AssetDecoder.getArrayBuffer(responses[0]),\n AssetDecoder.getImage(responses[1]),\n AssetDecoder.getImage(responses[2]),\n (responses[3].size > 0) ? AssetDecoder.getImage(responses[3]) : undefined,\n (responses[4].size > 0) ? AssetDecoder.getGLTFAsset(upc, responses[4]) : undefined,\n (responses[5].size > 0) ? AssetDecoder.getGLTFAsset(upc, responses[5]) : undefined,\n Promise.all(responses.slice(6, responses.length).map((textureResponse) => {\n return AssetDecoder.getImage(textureResponse);\n }))\n ]);\n }).then((assetsResponses) => {\n this.traceDownloadSuccess(upc, performance.now() - time1);\n return {\n upc: upc,\n objModel: assetsResponses[0],\n transparency: assetsResponses[1],\n shadow: assetsResponses[2],\n lensMap: assetsResponses[3],\n lensBoundingBox: assetsResponses[4],\n glassesLandmarks: assetsResponses[5],\n textures: assetsResponses[6],\n resolution: resolution\n };\n }).catch((e) => {\n this.traceDownloadFailure(upc, performance.now() - time1);\n logger.error(e);\n return Promise.reject(e);\n });\n }\n\n // TODO, is this used anymore?\n private glassesArchiveUrls(\n upc: string,\n resolution: AssetResolution,\n singleTexture: number | undefined,\n lensMap: boolean,\n envConfig: EnvironmentConfig\n ): string[] {\n // const normalizedUpc = normalizeSize(normalizeRemix(upc));\n\n const b3dUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.b3d}`;\n const transparencyUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.transparency}`;\n const shadowUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.shadow}`;\n const lensMapUrl = (lensMap) ? `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.lensMap}` : '';\n\n const textureIndexes = (singleTexture !== undefined) ?\n [singleTexture] : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];\n const textureUrls = textureIndexes.map((x) => {\n return `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.color(x)}`;\n });\n\n return [\n b3dUrl,\n transparencyUrl,\n shadowUrl,\n lensMapUrl,\n ...textureUrls\n ];\n }\n\n private downloadB3dAsset(glassesAssetUrl: string): Promise {\n return fetch(glassesAssetUrl)\n .then((response: Response) => {\n if (response.ok) {\n return response.blob();\n } else {\n logger.error('b3d asset {} failed: [{} {}]',\n response.url, response.status, response.statusText);\n switch (response.status) {\n case 403:\n return Promise.reject(new GlassesDownloadForbiddenError(glassesAssetUrl));\n case 404:\n return Promise.reject(new GlassesNotFoundError(glassesAssetUrl));\n default:\n return Promise.reject(new GlassesDownloadError(glassesAssetUrl));\n }\n }\n }).catch((e) => {\n logger.error(e);\n return Promise.reject(new GlassesDownloadError(glassesAssetUrl));\n });\n }\n\n // private downloadGltfAsset(glassesAssetUrl: string): Promise {\n // return fetch(glassesAssetUrl)\n // .then((response: Response) => {\n // if (response.ok) {\n // return response.arrayBuffer();\n // } else {\n // logger.error('gltf asset {} failed: [{} {}]',\n // response.url, response.status, response.statusText);\n // switch (response.status) {\n // case 403:\n // return Promise.reject(new GlassesDownloadForbiddenError(glassesAssetUrl));\n // case 404:\n // return Promise.reject(new GlassesNotFoundError(glassesAssetUrl));\n // default:\n // return Promise.reject(new GlassesDownloadError(glassesAssetUrl));\n // }\n // }\n // }).catch((e) => {\n // logger.error(e);\n // return Promise.reject(new GlassesDownloadError(glassesAssetUrl));\n // });\n // }\n\n private traceDownloadSuccess(upc: string, ttime: number) {\n this.remoteLog.sendAppViewSession(\n {\n statusCode: AppViewSessionKeys.GLASSES_OK + AppViewSessionKeys.GLASSES_DOWNLOAD_SUCCESS_UPC,\n statusText: upc,\n }, {\n statusCode: AppViewSessionKeys.GLASSES_OK + AppViewSessionKeys.GLASSES_DOWNLOAD_SUCCESS_TIME,\n statusText: ttime.toString(),\n },\n );\n }\n\n private traceDownloadFailure(upc: string, ttime: number) {\n this.remoteLog.sendAppViewSession(\n {\n statusCode: AppViewSessionKeys.GLASSES_KO + AppViewSessionKeys.GLASSES_DOWNLOAD_FAILURE_UPC,\n statusText: upc,\n }, {\n statusCode: AppViewSessionKeys.GLASSES_KO + AppViewSessionKeys.GLASSES_DOWNLOAD_FAILURE_TIME,\n statusText: ttime.toString(),\n },\n );\n }\n}\n\nexport {\n GlassesDownloader\n};\n","import React from 'react';\nexport var ReactReduxContext = /*#__PURE__*/React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n ReactReduxContext.displayName = 'ReactRedux';\n}\n\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n return batch;\n};","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n var batch = getBatch();\n var first = null;\n var last = null;\n return {\n clear: function clear() {\n first = null;\n last = null;\n },\n notify: function notify() {\n batch(function () {\n var listener = first;\n\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n get: function get() {\n var listeners = [];\n var listener = first;\n\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n\n return listeners;\n },\n subscribe: function subscribe(callback) {\n var isSubscribed = true;\n var listener = last = {\n callback: callback,\n next: null,\n prev: last\n };\n\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n\n return function unsubscribe() {\n if (!isSubscribed || first === null) return;\n isSubscribed = false;\n\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n };\n}\n\nvar nullListeners = {\n notify: function notify() {},\n get: function get() {\n return [];\n }\n};\nexport function createSubscription(store, parentSub) {\n var unsubscribe;\n var listeners = nullListeners;\n\n function addNestedSub(listener) {\n trySubscribe();\n return listeners.subscribe(listener);\n }\n\n function notifyNestedSubs() {\n listeners.notify();\n }\n\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n\n function isSubscribed() {\n return Boolean(unsubscribe);\n }\n\n function trySubscribe() {\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n\n function tryUnsubscribe() {\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = undefined;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n\n var subscription = {\n addNestedSub: addNestedSub,\n notifyNestedSubs: notifyNestedSubs,\n handleChangeWrapper: handleChangeWrapper,\n isSubscribed: isSubscribed,\n trySubscribe: trySubscribe,\n tryUnsubscribe: tryUnsubscribe,\n getListeners: function getListeners() {\n return listeners;\n }\n };\n return subscription;\n}","import { useEffect, useLayoutEffect } from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider(_ref) {\n var store = _ref.store,\n context = _ref.context,\n children = _ref.children;\n var contextValue = useMemo(function () {\n var subscription = createSubscription(store);\n return {\n store: store,\n subscription: subscription\n };\n }, [store]);\n var previousState = useMemo(function () {\n return store.getState();\n }, [store]);\n useIsomorphicLayoutEffect(function () {\n var subscription = contextValue.subscription;\n subscription.onStateChange = subscription.notifyNestedSubs;\n subscription.trySubscribe();\n\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n\n return function () {\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n };\n }, [contextValue, previousState]);\n var Context = context || ReactReduxContext;\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nif (process.env.NODE_ENV !== 'production') {\n Provider.propTypes = {\n store: PropTypes.shape({\n subscribe: PropTypes.func.isRequired,\n dispatch: PropTypes.func.isRequired,\n getState: PropTypes.func.isRequired\n }),\n context: PropTypes.object,\n children: PropTypes.any\n };\n}\n\nexport default Provider;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"],\n _excluded2 = [\"reactReduxForwardedRef\"];\nimport hoistStatics from 'hoist-non-react-statics';\nimport React, { useContext, useMemo, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n var updateCount = state[1];\n return [action.payload, updateCount + 1];\n}\n\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(function () {\n return effectFunc.apply(void 0, effectArgs);\n }, dependencies);\n}\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n // We want to capture the wrapper props and child props we used for later comparisons\n lastWrapperProps.current = wrapperProps;\n lastChildProps.current = actualChildProps;\n renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n}\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch) {\n // If we're not subscribed to the store, nothing to do here\n if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts\n\n var didUnsubscribe = false;\n var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n var checkForUpdates = function checkForUpdates() {\n if (didUnsubscribe) {\n // Don't run stale listeners.\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n return;\n }\n\n var latestStoreState = store.getState();\n var newChildProps, error;\n\n try {\n // Actually run the selector with the most recent store state and wrapper props\n // to determine what the child props should be\n newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n\n if (!error) {\n lastThrownError = null;\n } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n // Save references to the new child props. Note that we track the \"child props from store update\"\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n // been processed. If this went into useState/useReducer, we couldn't clear out the value without\n // forcing another re-render, which we don't want.\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n forceComponentUpdateDispatch({\n type: 'STORE_UPDATED',\n payload: {\n error: error\n }\n });\n }\n }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n // changed since we began.\n\n checkForUpdates();\n\n var unsubscribeWrapper = function unsubscribeWrapper() {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n\n if (lastThrownError) {\n // It's possible that we caught an error due to a bad mapState function, but the\n // parent re-rendered without this component and we're about to unmount.\n // This shouldn't happen as long as we do top-down subscriptions correctly, but\n // if we ever do those wrong, this throw will surface the error in our tests.\n // In that case, throw the error from here so it doesn't get lost.\n throw lastThrownError;\n }\n };\n\n return unsubscribeWrapper;\n}\n\nvar initStateUpdates = function initStateUpdates() {\n return [null, 0];\n};\n\nexport default function connectAdvanced(\n/*\r\n selectorFactory is a func that is responsible for returning the selector function used to\r\n compute new props from state, props, and dispatch. For example:\r\n export default connectAdvanced((dispatch, options) => (state, props) => ({\r\n thing: state.things[props.thingId],\r\n saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\r\n }))(YourComponent)\r\n Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\r\n outside of their selector as an optimization. Options passed to connectAdvanced are passed to\r\n the selectorFactory, along with displayName and WrappedComponent, as the second argument.\r\n Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\r\n props. Do not use connectAdvanced directly without memoizing results between calls to your\r\n selector, otherwise the Connect component will re-render on every state or props change.\r\n*/\nselectorFactory, // options object:\n_ref) {\n if (_ref === void 0) {\n _ref = {};\n }\n\n var _ref2 = _ref,\n _ref2$getDisplayName = _ref2.getDisplayName,\n getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n return \"ConnectAdvanced(\" + name + \")\";\n } : _ref2$getDisplayName,\n _ref2$methodName = _ref2.methodName,\n methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n _ref2$renderCountProp = _ref2.renderCountProp,\n renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n _ref2$storeKey = _ref2.storeKey,\n storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n _ref2$withRef = _ref2.withRef,\n withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n _ref2$forwardRef = _ref2.forwardRef,\n forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n _ref2$context = _ref2.context,\n context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n connectOptions = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n if (process.env.NODE_ENV !== 'production') {\n if (renderCountProp !== undefined) {\n throw new Error(\"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n }\n\n if (withRef) {\n throw new Error('withRef is removed. To access the wrapped instance, use a ref on the connected component');\n }\n\n var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: . ' + 'You may also pass a {context : MyContext} option to connect';\n\n if (storeKey !== 'store') {\n throw new Error('storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n }\n }\n\n var Context = context;\n return function wrapWithConnect(WrappedComponent) {\n if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n throw new Error(\"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n }\n\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n var displayName = getDisplayName(wrappedComponentName);\n\n var selectorFactoryOptions = _extends({}, connectOptions, {\n getDisplayName: getDisplayName,\n methodName: methodName,\n renderCountProp: renderCountProp,\n shouldHandleStateChanges: shouldHandleStateChanges,\n storeKey: storeKey,\n displayName: displayName,\n wrappedComponentName: wrappedComponentName,\n WrappedComponent: WrappedComponent\n });\n\n var pure = connectOptions.pure;\n\n function createChildSelector(store) {\n return selectorFactory(store.dispatch, selectorFactoryOptions);\n } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n // that just executes the given callback immediately.\n\n\n var usePureOnlyMemo = pure ? useMemo : function (callback) {\n return callback();\n };\n\n function ConnectFunction(props) {\n var _useMemo = useMemo(function () {\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\n // and values needed to control behavior (forwarded refs, alternate context instances).\n // To maintain the wrapperProps object reference, memoize this destructuring.\n var reactReduxForwardedRef = props.reactReduxForwardedRef,\n wrapperProps = _objectWithoutPropertiesLoose(props, _excluded2);\n\n return [props.context, reactReduxForwardedRef, wrapperProps];\n }, [props]),\n propsContext = _useMemo[0],\n reactReduxForwardedRef = _useMemo[1],\n wrapperProps = _useMemo[2];\n\n var ContextToUse = useMemo(function () {\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n // Memoize the check that determines which context instance we should use.\n return propsContext && propsContext.Consumer && isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n var contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n // We'll check to see if it _looks_ like a Redux store first.\n // This allows us to pass through a `store` prop that is just a plain value.\n\n var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(\"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a , \") + \"or pass a custom React context provider to and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\"));\n } // Based on the previous check, one of these must be true\n\n\n var store = didStoreComeFromProps ? props.store : contextValue.store;\n var childPropsSelector = useMemo(function () {\n // The child props selector needs the store reference as an input.\n // Re-create this selector whenever the store changes.\n return createChildSelector(store);\n }, [store]);\n\n var _useMemo2 = useMemo(function () {\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n var subscription = createSubscription(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n\n // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n return [subscription, notifyNestedSubs];\n }, [store, didStoreComeFromProps, contextValue]),\n subscription = _useMemo2[0],\n notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,\n // and memoize that value to avoid unnecessary context updates.\n\n\n var overriddenContextValue = useMemo(function () {\n if (didStoreComeFromProps) {\n // This component is directly subscribed to a store from props.\n // We don't want descendants reading from this store - pass down whatever\n // the existing context value is from the nearest connected ancestor.\n return contextValue;\n } // Otherwise, put this component's subscription instance into context, so that\n // connected descendants won't update until after this component is done\n\n\n return _extends({}, contextValue, {\n subscription: subscription\n });\n }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n // causes a change to the calculated child component props (or we caught an error in mapState)\n\n var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n _useReducer$ = _useReducer[0],\n previousStateUpdateResult = _useReducer$[0],\n forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n if (previousStateUpdateResult && previousStateUpdateResult.error) {\n throw previousStateUpdateResult.error;\n } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n var lastChildProps = useRef();\n var lastWrapperProps = useRef(wrapperProps);\n var childPropsFromStoreUpdate = useRef();\n var renderIsScheduled = useRef(false);\n var actualChildProps = usePureOnlyMemo(function () {\n // Tricky logic here:\n // - This render may have been triggered by a Redux store update that produced new child props\n // - However, we may have gotten new wrapper props after that\n // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n } // TODO We're reading the store directly in render() here. Bad idea?\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n // to determine what the child props should be.\n\n\n return childPropsSelector(store.getState(), wrapperProps);\n }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n // just useEffect instead to avoid the warning, since neither will run anyway.\n\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs]); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n useIsomorphicLayoutEffectWithArgs(subscribeUpdates, [shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch], [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.\n // We memoize the elements for the rendered child component as an optimization.\n\n var renderedWrappedComponent = useMemo(function () {\n return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n ref: reactReduxForwardedRef\n }));\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n var renderedChild = useMemo(function () {\n if (shouldHandleStateChanges) {\n // If this component is subscribed to store updates, we need to pass its own\n // subscription instance down to our descendants. That means rendering the same\n // Context instance, and putting a different value into the context.\n return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n value: overriddenContextValue\n }, renderedWrappedComponent);\n }\n\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n var Connect = pure ? React.memo(ConnectFunction) : ConnectFunction;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n\n if (forwardRef) {\n var forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n reactReduxForwardedRef: ref\n }));\n });\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return hoistStatics(forwarded, WrappedComponent);\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n}","function is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nexport default function shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (var i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch, options) {\n var constant = getConstant(dispatch, options);\n\n function constantSelector() {\n return constant;\n }\n\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n// * Detects whether the mapToProps function being called depends on props, which\n// is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n// * On first call, handles mapToProps if returns another function, and treats that\n// new function as the true mapToProps for subsequent calls.\n//\n// * On first call, verifies the first result is a plain object, in order to warn\n// the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, _ref) {\n var displayName = _ref.displayName;\n\n var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n }; // allow detectFactoryAndVerify to get ownProps\n\n\n proxy.dependsOnOwnProps = true;\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n var props = proxy(stateOrDispatch, ownProps);\n\n if (typeof props === 'function') {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n return props;\n };\n\n return proxy;\n };\n}","import bindActionCreators from '../utils/bindActionCreators';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n return {\n dispatch: dispatch\n };\n }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n return bindActionCreators(mapDispatchToProps, dispatch);\n }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","export default function bindActionCreators(actionCreators, dispatch) {\n var boundActionCreators = {};\n\n var _loop = function _loop(key) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = function () {\n return dispatch(actionCreator.apply(void 0, arguments));\n };\n }\n };\n\n for (var key in actionCreators) {\n _loop(key);\n }\n\n return boundActionCreators;\n}","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(function () {\n return {};\n }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, _ref) {\n var displayName = _ref.displayName,\n pure = _ref.pure,\n areMergedPropsEqual = _ref.areMergedPropsEqual;\n var hasRunOnce = false;\n var mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n if (hasRunOnce) {\n if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n return !mergeProps ? function () {\n return defaultMergeProps;\n } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"];\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n return function impureFinalPropsSelector(state, ownProps) {\n return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n var areStatesEqual = _ref.areStatesEqual,\n areOwnPropsEqual = _ref.areOwnPropsEqual,\n areStatePropsEqual = _ref.areStatePropsEqual;\n var hasRunAtLeastOnce = false;\n var state;\n var ownProps;\n var stateProps;\n var dispatchProps;\n var mergedProps;\n\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewState() {\n var nextStateProps = mapStateToProps(state, ownProps);\n var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleSubsequentCalls(nextState, nextOwnProps) {\n var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n var stateChanged = !areStatesEqual(nextState, state);\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n var initMapStateToProps = _ref2.initMapStateToProps,\n initMapDispatchToProps = _ref2.initMapDispatchToProps,\n initMergeProps = _ref2.initMergeProps,\n options = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n var mapStateToProps = initMapStateToProps(dispatch, options);\n var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n var mergeProps = initMergeProps(dispatch, options);\n\n if (process.env.NODE_ENV !== 'production') {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n }\n\n var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"];\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\r\n connect is a facade over connectAdvanced. It turns its args into a compatible\r\n selectorFactory, which has the signature:\r\n\r\n (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\r\n \r\n connect passes its args to connectAdvanced as options, which will in turn pass them to\r\n selectorFactory each time a Connect component instance is instantiated or hot reloaded.\r\n\r\n selectorFactory returns a final props selector from its mapStateToProps,\r\n mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\r\n mergePropsFactories, and pure args.\r\n\r\n The resulting final props selector is called by the Connect component instance whenever\r\n it receives new props or store state.\r\n */\n\nfunction match(arg, factories, name) {\n for (var i = factories.length - 1; i >= 0; i--) {\n var result = factories[i](arg);\n if (result) return result;\n }\n\n return function (dispatch, options) {\n throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n };\n}\n\nfunction strictEqual(a, b) {\n return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$connectHOC = _ref.connectHOC,\n connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n _ref$mergePropsFactor = _ref.mergePropsFactories,\n mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n _ref$selectorFactory = _ref.selectorFactory,\n selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n if (_ref2 === void 0) {\n _ref2 = {};\n }\n\n var _ref3 = _ref2,\n _ref3$pure = _ref3.pure,\n pure = _ref3$pure === void 0 ? true : _ref3$pure,\n _ref3$areStatesEqual = _ref3.areStatesEqual,\n areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n extraOptions = _objectWithoutPropertiesLoose(_ref3, _excluded);\n\n var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n return connectHOC(selectorFactory, _extends({\n // used in error messages\n methodName: 'connect',\n // used to compute Connect's displayName from the wrapped component's displayName.\n getDisplayName: function getDisplayName(name) {\n return \"Connect(\" + name + \")\";\n },\n // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n shouldHandleStateChanges: Boolean(mapStateToProps),\n // passed through to selectorFactory\n initMapStateToProps: initMapStateToProps,\n initMapDispatchToProps: initMapDispatchToProps,\n initMergeProps: initMergeProps,\n pure: pure,\n areStatesEqual: areStatesEqual,\n areOwnPropsEqual: areOwnPropsEqual,\n areStatePropsEqual: areStatePropsEqual,\n areMergedPropsEqual: areMergedPropsEqual\n }, extraOptions));\n };\n}\nexport default /*#__PURE__*/createConnect();","import { useReducer, useRef, useMemo, useContext, useDebugValue } from 'react';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from '../components/Context';\n\nvar refEquality = function refEquality(a, b) {\n return a === b;\n};\n\nfunction useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) {\n var _useReducer = useReducer(function (s) {\n return s + 1;\n }, 0),\n forceRender = _useReducer[1];\n\n var subscription = useMemo(function () {\n return createSubscription(store, contextSub);\n }, [store, contextSub]);\n var latestSubscriptionCallbackError = useRef();\n var latestSelector = useRef();\n var latestStoreState = useRef();\n var latestSelectedState = useRef();\n var storeState = store.getState();\n var selectedState;\n\n try {\n if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) {\n var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references\n\n if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) {\n selectedState = newSelectedState;\n } else {\n selectedState = latestSelectedState.current;\n }\n } else {\n selectedState = latestSelectedState.current;\n }\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n err.message += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\n\";\n }\n\n throw err;\n }\n\n useIsomorphicLayoutEffect(function () {\n latestSelector.current = selector;\n latestStoreState.current = storeState;\n latestSelectedState.current = selectedState;\n latestSubscriptionCallbackError.current = undefined;\n });\n useIsomorphicLayoutEffect(function () {\n function checkForUpdates() {\n try {\n var newStoreState = store.getState(); // Avoid calling selector multiple times if the store's state has not changed\n\n if (newStoreState === latestStoreState.current) {\n return;\n }\n\n var _newSelectedState = latestSelector.current(newStoreState);\n\n if (equalityFn(_newSelectedState, latestSelectedState.current)) {\n return;\n }\n\n latestSelectedState.current = _newSelectedState;\n latestStoreState.current = newStoreState;\n } catch (err) {\n // we ignore all errors here, since when the component\n // is re-rendered, the selectors are called again, and\n // will throw again, if neither props nor store state\n // changed\n latestSubscriptionCallbackError.current = err;\n }\n\n forceRender();\n }\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe();\n checkForUpdates();\n return function () {\n return subscription.tryUnsubscribe();\n };\n }, [store, subscription]);\n return selectedState;\n}\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context) {\n if (context === void 0) {\n context = ReactReduxContext;\n }\n\n var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n return useContext(context);\n };\n return function useSelector(selector, equalityFn) {\n if (equalityFn === void 0) {\n equalityFn = refEquality;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!selector) {\n throw new Error(\"You must pass a selector to useSelector\");\n }\n\n if (typeof selector !== 'function') {\n throw new Error(\"You must pass a function as a selector to useSelector\");\n }\n\n if (typeof equalityFn !== 'function') {\n throw new Error(\"You must pass a function as an equality function to useSelector\");\n }\n }\n\n var _useReduxContext = useReduxContext(),\n store = _useReduxContext.store,\n contextSub = _useReduxContext.subscription;\n\n var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub);\n useDebugValue(selectedState);\n return selectedState;\n };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const counter = useSelector(state => state.counter)\r\n * return
{counter}
\r\n * }\r\n */\n\nexport var useSelector = /*#__PURE__*/createSelectorHook();","export * from './exports';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch'; // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };","class VtoError extends Error {\n private type: string;\n\n constructor(type, message: string) {\n super(`${type}: ${message}`);\n this.type = type;\n this.message = message;\n Object.setPrototypeOf(this, VtoError.prototype);\n }\n\n getType() {\n return this.type;\n }\n}\n\nclass GenericError extends VtoError {\n constructor(e: Error) {\n super('GenericError', e.message);\n Object.setPrototypeOf(this, GenericError.prototype);\n }\n}\n\nclass OpacityError extends VtoError {\n public static type = 'OpacityError';\n\n constructor(message: string) {\n super(OpacityError.type, message);\n Object.setPrototypeOf(this, OpacityError.prototype);\n }\n}\n\nclass UnknownError extends VtoError {\n constructor(e: Error) {\n super('UnknownError', e.message);\n Object.setPrototypeOf(this, UnknownError.prototype);\n }\n}\n\nclass InitializationError extends VtoError {\n constructor() {\n super('InitializationError', 'failed to initialize vto');\n Object.setPrototypeOf(this, InitializationError.prototype);\n }\n}\n\nclass InvalidEnvironmentError extends VtoError {\n constructor(environment: string) {\n super('InvalidEnvironmentError', `${environment} environment is invalid`);\n Object.setPrototypeOf(this, InvalidEnvironmentError.prototype);\n }\n}\n\nclass InvalidParametersError extends VtoError {\n constructor(parameter: string) {\n super('InvalidParametersError', `${parameter} parameter is invalid`);\n Object.setPrototypeOf(this, InvalidParametersError.prototype);\n }\n}\n\nclass UpcSupportedError extends VtoError {\n constructor(upc: string) {\n super('UpcSupportedError', `failed to determine if upc ${upc} is supported`);\n Object.setPrototypeOf(this, UpcSupportedError.prototype);\n }\n}\n\nclass UserCreateError extends VtoError {\n constructor() {\n super('UserCreateError', 'failed to create user');\n Object.setPrototypeOf(this, UserCreateError.prototype);\n }\n}\n\nclass UserDownloadError extends VtoError {\n constructor(userId: string) {\n super('UserDownloadError', `failed to download user data for id: ${userId}`);\n Object.setPrototypeOf(this, UserDownloadError.prototype);\n }\n}\n\nclass VideoDownloadError extends VtoError {\n constructor(videoId: string) {\n super('VideoDownloadError', `failed to download video data for id: ${videoId}`);\n Object.setPrototypeOf(this, VideoDownloadError.prototype);\n }\n}\n\nclass UpcMissingError extends VtoError {\n constructor(upc: string) {\n super('UpcMissingError', `upc ${upc} could not be found`);\n Object.setPrototypeOf(this, UpcMissingError.prototype);\n }\n}\n\nclass RenderingError extends VtoError {\n constructor(upc: string) {\n super('RenderingError', `upc ${upc} failed to successfully render`);\n Object.setPrototypeOf(this, RenderingError.prototype);\n }\n}\n\nclass MountComponentError extends VtoError {\n constructor(divId: string) {\n super('MountComponentError', `failed to mount component at divId: ${divId}`);\n Object.setPrototypeOf(this, MountComponentError.prototype);\n }\n}\n\nclass UnmountComponentError extends VtoError {\n constructor(divId: string) {\n super('UnmountComponentError', `failed to unmount component at divId: ${divId}`);\n Object.setPrototypeOf(this, UnmountComponentError.prototype);\n }\n}\n\nclass UserMissingError extends VtoError {\n constructor(userId: string) {\n super('UserMissingError', `failed to find user with id: ${userId}`);\n Object.setPrototypeOf(this, UserMissingError.prototype);\n }\n}\n\nclass MirrorError extends VtoError {\n constructor() {\n super('MirrorError', 'failed to start vto mirror');\n Object.setPrototypeOf(this, MirrorError.prototype);\n }\n}\n\nclass InstanceManagementError extends VtoError {\n constructor() {\n super('InstanceManagementError', 'Trying to create a renderer without instanciating anything before');\n Object.setPrototypeOf(this, InstanceManagementError.prototype);\n }\n}\n\nclass MissingInstanceError extends VtoError {\n constructor(id: string) {\n super('MissingInstanceError', `Trying to access a non existing vto instance at id: ${id}`);\n Object.setPrototypeOf(this, MissingInstanceError.prototype);\n }\n}\n\nclass ScreenshotError extends VtoError {\n constructor() {\n super('ScreenshotError', 'failed to generate screenshot');\n Object.setPrototypeOf(this, ScreenshotError.prototype);\n }\n}\n\nexport {\n VtoError,\n GenericError,\n UnknownError,\n OpacityError,\n InitializationError,\n InvalidEnvironmentError,\n InvalidParametersError,\n UpcSupportedError,\n UserCreateError,\n UserDownloadError,\n VideoDownloadError,\n UpcMissingError,\n RenderingError,\n MountComponentError,\n UnmountComponentError,\n UserMissingError,\n MirrorError,\n InstanceManagementError,\n MissingInstanceError,\n ScreenshotError\n};","const glassesCache: Record = {};\n\nexport const GlassesCache = {\n get: (divId: string): GlassesData => {\n return glassesCache[divId];\n },\n\n contains: (divId: string): boolean => {\n return !!glassesCache[divId];\n },\n\n set: (divId: string, glassesData: GlassesData): void => {\n glassesCache[divId] = glassesData;\n },\n\n delete: (divId: string): void => {\n glassesCache[divId] = undefined;\n }\n};\n","const videoCache: Record = {};\n\nexport const VideoCache = {\n get: (divId: string): VideoData => {\n return videoCache[divId];\n },\n\n contains: (divId: string): boolean => {\n return !!videoCache[divId];\n },\n\n set: (divId: string, videoData: VideoData): void => {\n videoCache[divId] = videoData;\n },\n\n delete: (divId: string): void => {\n videoCache[divId] = undefined;\n }\n};\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport * as ReactGA from 'react-ga';\nimport { name, version } from '../../package.json';\nimport { AnalyticsConfig } from '../interfaces/AnalyticsConfig';\nimport { RenderDataResponse } from '../interfaces/RenderDataResponse';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'AnalyticsHelper');\n\nexport class AnalyticsHelper {\n static analyticsConfig: AnalyticsConfig;\n\n static config: Config;\n\n static dimensions = {\n brand: 'dimension1',\n locale: 'dimension2',\n storeId: 'dimension3',\n webglSupport: 'dimension4',\n captureSupport: 'dimension5',\n upc: 'dimension6',\n processingFailureReason: 'dimension7',\n pupillaryDistance: 'dimension8',\n webcamAccessSupport: 'dimension9',\n /* wasmSupport: 'dimension10', */\n webcamAvailable: 'dimension11',\n };\n\n static initialize(\n analyticsConfig: AnalyticsConfig,\n locale: string,\n brand: string,\n storeId: string,\n supportedFeatures: SupportedFeatures\n ) {\n this.analyticsConfig = analyticsConfig;\n ReactGA.initialize(AnalyticsHelper.config.gaTrackingId, {\n gaOptions: {\n name: AnalyticsHelper.config.trackerName\n }\n });\n const GA = ReactGA.ga;\n GA(`${AnalyticsHelper.config.trackerName}.set`, 'anonymizeIp', true);\n GA(`${AnalyticsHelper.config.trackerName}.set`, {\n [this.dimensions.locale]: locale,\n [this.dimensions.brand]: brand,\n [this.dimensions.storeId]: storeId,\n [this.dimensions.webglSupport]: supportedFeatures.webglRendering,\n });\n }\n\n private static sendEvent(\n eventCategory: VtoEventCatgory,\n eventName: string,\n fieldOptions?: Record,\n ...params) {\n try {\n const GA = ReactGA.ga;\n GA(`${AnalyticsHelper.config.trackerName}.send`, 'event', {\n eventCategory: eventCategory,\n eventAction: eventName,\n ...fieldOptions\n });\n\n if (this.analyticsConfig && eventName in this.analyticsConfig) {\n this.analyticsConfig[eventName](...params);\n }\n } catch (error) {\n logger.error('Analytics Event Failed', error);\n }\n }\n\n private static sendConfigEvent(eventName: string, ...params) {\n try {\n if (this.analyticsConfig && eventName in this.analyticsConfig) {\n this.analyticsConfig[eventName](...params);\n }\n } catch (error) {\n logger.error('Config Event Failed', error);\n }\n }\n\n static onInitializeSuccess() { AnalyticsHelper.sendEvent('User', 'onInitializeSuccess'); }\n static onInitializeError() { AnalyticsHelper.sendEvent('User', 'onInitializeError'); }\n static onRender(upc: string, pupillaryDistance: number) { AnalyticsHelper.sendEvent('Render', 'onRender', {[this.dimensions.upc]: upc, [this.dimensions.pupillaryDistance]: pupillaryDistance}, upc, pupillaryDistance); }\n static onRenderPose(renderData: RenderDataResponse) {\n this.sendConfigEvent('onRenderPose', renderData);\n }\n static onRenderSwipe(upc: string) { AnalyticsHelper.sendEvent('Render', 'onRenderSwipe', {[this.dimensions.upc]: upc}, upc); }\n static onRenderFailure(upc: string) { AnalyticsHelper.sendEvent('Render', 'onRenderFailure', {[this.dimensions.upc]: upc}, upc); }\n static onCloseRender() { AnalyticsHelper.sendEvent('Render', 'onCloseRender'); }\n}","import { InvalidParametersError } from '../constants/errors';\n\nconst isObject = (item: unknown) => {\n return (item !== undefined && typeof item === 'object' && !Array.isArray(item));\n};\n\nconst isString = (item: unknown) => {\n return (item !== undefined && typeof item === 'string');\n};\n\nconst isNumber = (item: unknown) => {\n return (item !== undefined && typeof item === 'number' && !Number.isNaN(item));\n};\n\nconst isBoolean = (item: unknown) => {\n return (item !== undefined && typeof item === 'boolean');\n};\n\nconst isFunction = (item: unknown) => {\n return (item !== undefined && {}.toString.call(item) === '[object Function]');\n};\n\nconst stringToNumber = (input: string | number): number => {\n try {\n if (input === undefined) {\n return undefined;\n } else if (typeof input === 'number') {\n return input;\n } else if (typeof input === 'string') {\n return parseFloat(input);\n } else {\n throw new InvalidParametersError('');\n }\n } catch {\n throw new InvalidParametersError('');\n }\n}\n\nconst mergeDeep = (target, source) => {\n const output = Object.assign({}, target);\n\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach(key => {\n if (isObject(source[key])) {\n if (!(key in target))\n Object.assign(output, { [key]: source[key] });\n else\n output[key] = mergeDeep(target[key], source[key]);\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n\n return output;\n}\n\nconst removeEmpty = (obj: T): Partial => {\n Object.keys(obj).forEach(key => {\n if (obj[key] && typeof obj[key] === 'object') {\n removeEmpty(obj[key]);\n } else if (obj[key] === undefined) {\n delete obj[key];\n }\n });\n return obj;\n};\n\nexport { isString, isBoolean, isNumber, isFunction, isObject, stringToNumber, mergeDeep, removeEmpty};\n","import { ScreenshotError } from '../constants/errors';\n\nexport interface Screenshot {\n dataUrl: string;\n w: number;\n h: number\n}\n\nlet renderCanvas: HTMLCanvasElement;\n\nexport const setActiveCanvas = (canvas: HTMLCanvasElement) => {\n renderCanvas = canvas;\n};\n\nexport const disposeScreenshot = () => {\n renderCanvas = null; \n}\n\nexport const getScreenshot = (type: string, quality: number): Promise => {\n return new Promise((resolve, reject)=>{\n try {\n\n let outputCanvas = document.createElement('canvas');\n const antialiasCanvas = document.createElement('canvas');\n \n outputCanvas.width = parseInt(renderCanvas.style.width);\n outputCanvas.height = parseInt(renderCanvas.style.height);\n\n antialiasCanvas.width = renderCanvas.width;\n antialiasCanvas.height = renderCanvas.height;\n\n let ctx = outputCanvas.getContext('2d');\n const antialiasCanvasContext = antialiasCanvas.getContext('2d');\n const ratio = (renderCanvas.width / outputCanvas.width);\n const steps = ratio>>1;\n antialiasCanvasContext.filter = `blur(${steps}px)`;\n antialiasCanvasContext.drawImage(renderCanvas, 0, 0);\n\n ctx.drawImage(antialiasCanvas,\n 0, 0, renderCanvas.width, renderCanvas.height,\n 0, 0, outputCanvas.width, outputCanvas.height);\n \n resolve({\n dataUrl: outputCanvas.toDataURL(type, quality),\n w: outputCanvas.width,\n h: outputCanvas.height\n });\n \n outputCanvas = undefined;\n ctx = undefined\n } catch (e) {\n console.error(e);\n reject(new ScreenshotError());\n }\n });\n}","import { ThreeRender } from '@luxottica/vm-renderer-threejs';\nimport { InstanceManagementError, MissingInstanceError } from '../constants/errors';\n\nimport { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../../package.json';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'VtoInstanceContainer');\n\nclass VtoInstanceContainer {\n // tslint:disable-next-line: variable-name\n private static _instance: VtoInstanceContainer;\n private vtoInstances: VtoInstance[];\n\n constructor() {\n this.vtoInstances = [];\n }\n\n public static get instance() {\n if (!VtoInstanceContainer._instance) {\n VtoInstanceContainer._instance = new VtoInstanceContainer();\n }\n return VtoInstanceContainer._instance;\n }\n\n public addVto(divId: string) {\n for (const instance of this.vtoInstances) {\n if (instance.id === divId) {\n return;\n }\n }\n this.vtoInstances.push({\n id: divId,\n });\n }\n\n public addRender({ id, render }: { id: string; render: ThreeRender; }) {\n for (const instance of this.vtoInstances) {\n if (instance.id === id) {\n if (instance.glRender) {\n logger.warn('You are probably instantiating a VTO on a target without closing it');\n }\n instance.glRender = render;\n return;\n }\n }\n throw new InstanceManagementError();\n }\n\n public removeInstance(id: string) {\n const instanceId = this.vtoInstances.findIndex((value) => {\n return value.id === id;\n });\n if (instanceId >= 0) {\n this.vtoInstances.splice(instanceId, 1);\n }\n }\n\n public getVtoInstance(id: string): VtoInstance {\n try {\n const found = this.vtoInstances.find((value) => {\n return value.id === id;\n });\n return found;\n } catch {\n throw new MissingInstanceError(id);\n }\n }\n}\n\nexport {\n VtoInstanceContainer,\n};\n","export const SET_CONFIG = 'SET_CONFIG';\nexport const SET_GLASSES_ENVIRONMENT = 'SET_GLASSES_ENVIRONMENT';\nexport const SET_ANALYTICS_CONFIG = 'SET_ANALYTICS_CONFIG';\n\nexport const SET_USER = 'SET_USER';\n\nexport const SET_CACHE_LIMITS = 'SET_CACHE_LIMITS';\nexport const UPDATE_INSTANCE = 'UPDATE_INSTANCE';\nexport const ADD_VIDEO = 'ADD_VIDEO';\nexport const DELETE_VIDEO_DATA = 'DELETE_VIDEO_DATA';\nexport const SET_VIDEO_DATA = 'SET_VIDEO_DATA';\nexport const SET_VIDEO_FACE_DATA = 'SET_VIDEO_FACE_DATA';\nexport const SET_RENDER_CANVAS_DATA = 'SET_RENDER_CANVAS_DATA';\nexport const SET_VIDEO_STATUS = 'SET_VIDEO_STATUS';\nexport const SET_INSTANCE_INDEX = 'SET_INSTANCE_INDEX';\nexport const SWIPE_INSTANCE = 'SWIPE_INSTANCE';\nexport const DELETE_INSTANCE = 'DELETE_INSTANCE';\nexport const SET_VIDEO_LOADING = 'SET_VIDEO_LOADING';\nexport const ERASE_VIDEO_CACHE = 'ERASE_VIDEO_CACHE';\n\nexport const ADD_GLASSES = 'ADD_GLASSES';\nexport const GLASSES_FALLBACK = 'GLASSES_FALLBACK';\nexport const SET_GLASSES_DATA = 'SET_GLASSES_DATA';\nexport const SET_GLASSES_STATUS = 'SET_GLASSES_STATUS';\nexport const ERASE_GLASSES_CACHE = 'ERASE_GLASSES_CACHE';\n\nexport const SET_MIRROR_STATUS = 'SET_MIRROR_STATUS';\nexport const SET_MIRROR_STREAM_DATA = 'SET_MIRROR_STREAM_DATA';\nexport const CLEAR_MIRROR_STREAM_DATA = 'CLEAR_MIRROR_STREAM_DATA';\nexport const ADD_MIRROR_GLASSES = 'ADD_MIRROR_GLASSES';\nexport const SET_MIRROR_GLASSES_DATA = 'SET_MIRROR_GLASSES_DATA';\nexport const SET_MIRROR_GLASSES_STATUS = 'SET_MIRROR_GLASSES_STATUS';\n\nexport const ADD_MIRROR_VIDEO = 'ADD_MIRROR_VIDEO';\nexport const SET_MIRROR_VIDEO_DATA = 'SET_MIRROR_VIDEO_DATA';\nexport const SET_MIRROR_VIDEO_STATUS = 'SET_MIRROR_VIDEO_STATUS';\n\nexport const SET_RENDERER_STATUS = 'SET_RENDERER_STATUS';","import { Action, createAction, handleActions } from 'redux-actions';\nimport { GlassesCache } from '../app/render/cache/GlassesCache';\nimport { VideoCache } from '../app/render/cache/VideoCache';\nimport * as Actions from '../constants/actions';\nimport { AssetResolution } from '@luxottica/vm-glasses';\n\nconst initialState: RenderStoreState = {\n instance: {}\n};\n\nexport const RenderActions = {\n updateInstance: createAction(Actions.UPDATE_INSTANCE),\n setInstanceIndex: createAction<{ divId: string, poseIndex?: number, noseIndex?: number }>(Actions.SET_INSTANCE_INDEX),\n swipeInstance: createAction<{ divId: string }>(Actions.SWIPE_INSTANCE),\n deleteInstance: createAction<{ divId: string }>(Actions.DELETE_INSTANCE),\n\n addVideo: createAction<{ divId: string, videoId: string }>(Actions.ADD_VIDEO),\n setVideoData: createAction<{ divId: string, videoId: string, videoData: VideoData }>(Actions.SET_VIDEO_DATA),\n deleteVideoData: createAction<{ divId: string }>(Actions.DELETE_VIDEO_DATA),\n setVideoFaceData: createAction<{ divId: string, videoId: string, videoFaceData: VideoFaceData }>(Actions.SET_VIDEO_FACE_DATA),\n setVideoStatus: createAction<{ divId: string, videoId: string, status: RenderStatus }>(Actions.SET_VIDEO_STATUS),\n eraseVideoCache: createAction(Actions.ERASE_VIDEO_CACHE),\n\n addGlasses: createAction<{ divId: string, upc: string }>(Actions.ADD_GLASSES),\n glassesFallback: createAction<{ divId: string, upc: string, resolution: AssetResolution }>(Actions.GLASSES_FALLBACK),\n setGlassesData: createAction<{ divId: string, upc: string, glassesData: GlassesData }>(Actions.SET_GLASSES_DATA),\n setGlassesStatus: createAction<{ divId: string, upc: string, status: RenderStatus }>(Actions.SET_GLASSES_STATUS),\n\n setRendererStatus: createAction<{ divId: string, status: RenderStatus}>(Actions.SET_RENDERER_STATUS)\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const RenderReducer = handleActions({\n\n [Actions.UPDATE_INSTANCE]: (state, action: Action): RenderStoreState => {\n return {\n ...state,\n instance: {\n ...state.instance,\n [action.payload.divId]: {\n ...action.payload\n }\n }\n };\n },\n\n [Actions.DELETE_INSTANCE]: (state, action: Action): RenderStoreState => {\n const newState = { ...state };\n delete newState.instance[action.payload.divId];\n return newState;\n },\n\n [Actions.ADD_VIDEO]: (state, action: Action<{ divId: string, videoId: string }>): RenderStoreState => {\n const currentInstance = state.instance[action.payload.divId];\n return {\n ...state,\n instance: {\n ...state.instance,\n [action.payload.divId]: {\n ...currentInstance,\n videoStatus: 'LOADING',\n rendererStatus: 'LOADING',\n }\n }\n };\n },\n\n [Actions.DELETE_VIDEO_DATA]: (state, action: Action<{ divId: string, videoId: string }>): RenderStoreState => {\n VideoCache.delete(action.payload.divId);\n const currentInstance = state.instance[action.payload.divId];\n return {\n ...state,\n instance: {\n ...state.instance,\n [action.payload.divId]: {\n ...currentInstance,\n videoStatus: undefined\n }\n }\n }\n },\n\n [Actions.SET_VIDEO_DATA]: (state, action: Action<{ divId: string, videoId: string, videoData: VideoData}>): RenderStoreState => {\n\n VideoCache.set(action.payload.divId, action.payload.videoData);\n const currentInstance = state.instance[action.payload.divId];\n\n return {\n ...state,\n instance: {\n ...state.instance,\n [action.payload.divId]: {\n ...currentInstance,\n videoStatus: 'READY'\n }\n }\n }\n },\n\n [Actions.SET_VIDEO_FACE_DATA]: (state, action: Action<{ divId: string, videoId: string, videoFaceData: VideoFaceData }>): RenderStoreState => {\n \n if (VideoCache.contains(action.payload.videoId)) {\n VideoCache.set(action.payload.divId, {\n ...VideoCache.get(action.payload.divId),\n faceData: {\n ...VideoCache.get(action.payload.divId).faceData,\n ...action.payload.videoFaceData\n }\n });\n return { ...state };\n } else {\n return { ...state };\n }\n },\n\n [Actions.SET_VIDEO_STATUS]: (state, action: Action<{ divId: string, videoId: string, status: RenderStatus}>): RenderStoreState => {\n const currentInstance = state.instance[action.payload.divId];\n\n return {\n ...state,\n instance: {\n ...state.instance,\n [action.payload.divId]: {\n ...currentInstance,\n videoStatus: action.payload.status\n }\n }\n }\n },\n\n [Actions.SET_INSTANCE_INDEX]: (state, action: Action<{divId: string, poseIndex: number, noseIndex: number}>): RenderStoreState => {\n if (state.instance.hasOwnProperty(action.payload.divId)\n && (action.payload.poseIndex !== state.instance[action.payload.divId].renderOptions.poseIndex\n || action.payload.noseIndex !== state.instance[action.payload.divId].renderOptions.noseIndex)) {\n return {\n ...state,\n instance: {...state.instance,\n [action.payload.divId]: {\n ...state.instance[action.payload.divId],\n renderOptions: {\n ...state.instance[action.payload.divId].renderOptions,\n poseIndex: (action.payload.poseIndex || action.payload.poseIndex === 0)\n ? action.payload.poseIndex : state.instance[action.payload.divId].renderOptions.poseIndex,\n noseIndex: (action.payload.noseIndex || action.payload.noseIndex === 0)\n ? action.payload.noseIndex : state.instance[action.payload.divId].renderOptions.noseIndex\n }\n }\n }\n };\n } else {\n return {\n ...state\n };\n }\n },\n\n [Actions.SWIPE_INSTANCE]: (state, action: Action<{divId: string}>): RenderStoreState => {\n if (state.instance.hasOwnProperty(action.payload.divId)) {\n return {\n ...state,\n instance: {\n ...state.instance,\n [action.payload.divId]: {\n ...state.instance[action.payload.divId],\n swiped: true\n }\n }\n };\n } else {\n return { ...state };\n }\n },\n\n [Actions.ADD_GLASSES]: (state, action: Action<{\n divId: string,\n upc: string,\n }>): RenderStoreState => {\n const currentInstance = state.instance[action.payload.divId];\n\n return {\n ...state,\n instance: {\n ...state.instance,\n [action.payload.divId]: {\n ...currentInstance,\n upcStatus: 'LOADING',\n rendererStatus: 'LOADING',\n }\n }\n };\n },\n\n [Actions.GLASSES_FALLBACK]: (state, action: Action<{\n divId: string,\n upc: string,\n resolution: AssetResolution\n }>): RenderStoreState => {\n\n const currentInstance = state.instance[action.payload.divId];\n\n return {\n ...state,\n instance: {\n ...state.instance,\n [currentInstance.divId]: {\n ...currentInstance,\n upc: action.payload.upc,\n renderOptions: {\n ...currentInstance.renderOptions,\n resolution: action.payload.resolution\n }\n }\n }\n };\n },\n\n [Actions.SET_GLASSES_STATUS]: (state, action: Action<{\n divId: string,\n upc: string,\n status: RenderStatus\n }>): RenderStoreState => {\n\n const currentInstance = state.instance[action.payload.divId];\n\n return {\n ...state,\n instance: {\n ...state.instance,\n [action.payload.divId]: {\n ...currentInstance,\n upcStatus: action.payload.status\n }\n }\n }\n },\n\n [Actions.SET_GLASSES_DATA]: (state, action: Action<{ divId: string, upc: string, glassesData: GlassesData }>): RenderStoreState => {\n\n const currentInstance = state.instance[action.payload.divId];\n GlassesCache.set(action.payload.divId, action.payload.glassesData);\n\n return {\n ...state,\n instance: {\n ...state.instance,\n [action.payload.divId]: {\n ...currentInstance,\n upcStatus: 'READY'\n }\n }\n }\n },\n\n [Actions.SET_RENDERER_STATUS]: (state, action: Action<{\n divId: string,\n status: RenderStatus,\n }>): RenderStoreState => {\n\n const currentInstance = state.instance[action.payload.divId];\n\n return {\n ...state,\n instance: {\n ...state.instance,\n [action.payload.divId]: {\n ...currentInstance,\n rendererStatus: action.payload.status\n }\n }\n }\n },\n\n}, initialState);\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport * as ReactDOM from 'react-dom';\nimport { Store } from 'redux';\nimport { name, version } from '../../package.json';\nimport { GlassesCache } from '../app/render/cache/GlassesCache';\nimport { VideoCache } from '../app/render/cache/VideoCache';\nimport { InvalidParametersError, UnknownError, UnmountComponentError, VtoError } from '../constants/errors';\nimport { AnalyticsHelper } from '../helpers/AnalyticsHelper';\nimport { isString } from '../helpers/ParameterHelper';\nimport { VtoInstanceContainer } from '../helpers/VtoInstanceContainer';\nimport { CloseRenderOptions } from '../interfaces/CloseRenderOptions';\nimport { RootState } from '../reducers/combinedReducers';\nimport { RenderActions } from '../reducers/renderReducer';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'CloseRenderFunction');\n\nconst validateCloseRenderOptions = (options: CloseRenderOptions) => {\n if (!options.divId || !isString(options.divId)) {\n throw new InvalidParametersError('divId');\n }\n};\n\nconst CloseRenderFunction = (\n store: Store,\n options: CloseRenderOptions,\n onSuccess: () => void,\n onError: (error: VtoError) => void,\n): void => {\n logger.debug('closing vto with divId={}', options?.divId);\n\n try {\n validateCloseRenderOptions(options);\n } catch (error: unknown) {\n if (error instanceof VtoError) {\n onError(error);\n } else if (error instanceof Error){\n onError(new UnknownError(error));\n }\n return;\n }\n\n try {\n AnalyticsHelper.onCloseRender();\n const instance: VtoInstance = VtoInstanceContainer.instance.getVtoInstance(options.divId);\n const container = document.getElementById(instance.id);\n if (container) {\n if (ReactDOM.unmountComponentAtNode(container)) {\n logger.debug('closed vto with divId={}', options?.divId);\n onSuccess();\n VideoCache.delete(options.divId);\n GlassesCache.delete(options.divId);\n store.dispatch(RenderActions.deleteInstance({ divId: options.divId }));\n } else {\n onError(new UnmountComponentError(options?.divId));\n }\n }\n if (instance.glRender) {\n instance.glRender.destroy();\n instance.glRender = undefined;\n }\n VtoInstanceContainer.instance.removeInstance(instance.id);\n } catch (error) {\n onError(new UnmountComponentError(options.divId));\n }\n}\n\nexport {\n CloseRenderFunction\n};\n","import { VtoCallbacks } from '../interfaces/InitializeOptions';\n\nconst setCallbacks = (\n callbacks: Partial\n) => {\n if (callbacks) {\n if (callbacks.onTransitionAnimation) { CallbackHelper.onTransitionAnimation = callbacks.onTransitionAnimation; }\n if (callbacks.onTransitionAnimationEnd) { CallbackHelper.onTransitionAnimationEnd = callbacks.onTransitionAnimationEnd; }\n }\n};\n\nconst setRenderSuccessCallback = (\n callback: () => void\n) => {\n if (!!callback) {\n CallbackHelper.onRenderSuccess = callback;\n }\n};\n\nconst setRenderErrorCallback = (\n callback: (error) => void\n) => {\n if (!!callback) {\n CallbackHelper.onRenderError = callback;\n }\n};\n\nconst CallbackHelper = {\n onRenderSuccess: () => { return; },\n onRenderError: (error) => { return; },\n onTransitionAnimation: (opacityValue: number) => { return; },\n onTransitionAnimationEnd: (opacityValue: number) => { return; },\n};\n\nexport { CallbackHelper, setCallbacks, setRenderSuccessCallback, setRenderErrorCallback };\n","const acceptanceConfig = {\n vtoCoreEnvironment: 'acceptance',\n vtoGlassesEnvironment: 'PROD',\n vtoServerEnvironment: 'ACCEPTANCE',\n publicHost: 'https://d4dq1eaizwz84.cloudfront.net',\n gaTrackingId: 'UA-84556257-4',\n trackerName: 'VTO_CORE_TRACKER'\n}\n\nmodule.exports = acceptanceConfig;","const developmentConfig = {\n vtoCoreEnvironment: 'development',\n vtoGlassesEnvironment: 'PROD',\n vtoServerEnvironment: 'STAGING',\n publicHost: 'http://localhost:3000',\n gaTrackingId: 'UA-84556257-4',\n trackerName: 'VTO_CORE_TRACKER'\n}\n\nmodule.exports = developmentConfig;","const developmentLocalServerConfig = {\n vtoCoreEnvironment: 'development-localserver',\n vtoGlassesEnvironment: 'PROD',\n vtoServerEnvironment: 'LOCAL',\n publicHost: 'http://localhost:3000',\n gaTrackingId: 'UA-84556257-4',\n trackerName: 'VTO_CORE_TRACKER'\n}\n\nmodule.exports = developmentLocalServerConfig;","const integrationConfig = {\n vtoCoreEnvironment: 'integration',\n vtoGlassesEnvironment: 'PROD',\n vtoServerEnvironment: 'INTEGRATION',\n publicHost: 'https://d4dq1eaizwz84.cloudfront.net',\n gaTrackingId: 'UA-84556257-4',\n trackerName: 'VTO_CORE_TRACKER'\n}\n\nmodule.exports = integrationConfig;","const productionConfig = {\n vtoCoreEnvironment: 'production',\n vtoGlassesEnvironment: 'PROD',\n vtoServerEnvironment: 'PRODUCTION',\n publicHost: 'https://d4dq1eaizwz84.cloudfront.net',\n gaTrackingId: 'UA-84556257-5',\n trackerName: 'VTO_CORE_TRACKER'\n}\n\nmodule.exports = productionConfig;","const stagingConfig = {\n vtoCoreEnvironment: 'staging',\n vtoGlassesEnvironment: 'PROD',\n vtoServerEnvironment: 'STAGING',\n publicHost: 'https://s3.amazonaws.com/vto-core',\n gaTrackingId: 'UA-84556257-4',\n trackerName: 'VTO_CORE_TRACKER'\n}\n\nmodule.exports = stagingConfig;","import { Action, createAction, handleActions } from 'redux-actions';\nimport * as Actions from '../constants/actions';\nimport * as productionConfig from '../../src/config/production';\nimport { AnalyticsConfig } from '../interfaces/AnalyticsConfig';\n\nconst initialState: AppStoreState = {\n config: {\n ...productionConfig,\n vtoCoreEnvironment: productionConfig.vtoCoreEnvironment as VtoCoreEnvironment,\n vtoServerEnvironment: productionConfig.vtoServerEnvironment as VtoServerEnvironment\n },\n analyticsConfig: {},\n};\n\nexport const AppActions = {\n setConfig: createAction(Actions.SET_CONFIG),\n setAnalyticsConfig: createAction(Actions.SET_ANALYTICS_CONFIG),\n};\n\nexport const AppReducer = handleActions({\n\n [Actions.SET_CONFIG]: (state, action: Action): AppStoreState => {\n return (action.payload) ? {\n ...state,\n config: {\n ...action.payload,\n }\n } : {\n ...state\n }\n },\n\n [Actions.SET_ANALYTICS_CONFIG]: (state, action: Action): AppStoreState => {\n return (action.payload) ? {\n ...state,\n analyticsConfig: (action.payload) ? action.payload : {}\n } : {\n ...state\n }\n },\n\n}, initialState);\n","import { AssetLoader } from '@luxottica/vm-renderer-threejs';\nimport { Catalog, AssetResolution, GlassesDownloader, GlassesEnvironment, UpcAvailability } from '@luxottica/vm-glasses';\nimport { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../../package.json';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'GlassesHelper');\n\nconst glassesDownloader = new GlassesDownloader();\nconst assetLoader = new AssetLoader();\n\nconst glassesPromise = (\n upc: string,\n resolution: AssetResolution,\n glassesEnvironment: GlassesEnvironment,\n singleTexture?: number\n): Promise => {\n const b3dparams = { upc: upc, resolution: resolution, glassesEnvironment: glassesEnvironment, lensMap: true, singleTexture: singleTexture};\n return Catalog.getUpcAvailability({env: glassesEnvironment}, upc).then((upcAvailability: UpcAvailability)=> {\n if(upcAvailability.glassesType == 'GLTF') {\n return glassesDownloader.downloadGltfGlasses({upc, glassesEnvironment}).then((gltfPointer)=>{\n return assetLoader.loadGltfAsset(gltfPointer).then((glasses: GltfAsset)=>{\n return { asset: glasses, accessTime: Date.now(), environment: glassesEnvironment, resolution };\n });\n });\n } else {\n return glassesDownloader.downloadGlasses(b3dparams)\n .catch((error)=>{\n b3dparams.lensMap = false;\n return glassesDownloader.downloadGlasses(b3dparams);\n }).then((glasses) => {\n logger.debug(`download succeeded for upc ${upc}`);\n return {\n asset: glasses,\n accessTime: Date.now(),\n environment: glassesEnvironment\n };\n }).catch((error) => {\n logger.error(error);\n throw error;\n });\n }\n });\n};\n\nexport const GlassesHelper = {\n\n getUpcKey: (upc: string, resolution: AssetResolution, environment: GlassesEnvironment, singlePose: boolean, poseIndex: number) => {\n return `${upc}_${resolution}_${environment}${singlePose ? `_${poseIndex}` : ''}`;\n },\n\n isUpcSupported: (\n upc: string\n ): Promise => {\n return Catalog.getUpcAvailability({ env: GlassesEnvironment.PROD },upc)\n .then((upcAvailability) => {\n if(upcAvailability.glassesType === 'B3D')\n return upcAvailability.available[256] || upcAvailability.available[512]\n else if (upcAvailability.glassesType === 'GLTF')\n return upcAvailability.lods.length > 0;\n \n return false;\n });\n },\n\n downloadGlasses: (\n upc: string,\n resolution: AssetResolution,\n glassesEnvironment: GlassesEnvironment,\n singleTexture?: number\n ): Promise => {\n \n if (upc) {\n return new Promise((resolve, reject) => {\n glassesPromise(upc, resolution, glassesEnvironment, singleTexture).then((glasses) => {\n resolve(glasses);\n }).catch((e) => {\n logger.error(`failed to download ${resolution} res glasses for upc ${upc}`, e);\n reject(e);\n });\n });\n } else {\n return Promise.reject('upc is undefined');\n }\n }\n};\n","\nimport { VtoServerClient } from '@luxottica/vm-vtoserver-client';\nimport {\n UpcSupportedError\n} from './constants/errors';\nimport { GlassesHelper } from './helpers/GlassesHelper';\n\nimport { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../package.json';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'VtoApi');\n\nconst VtoApi = {\n setEnvironment(environment: VtoServerEnvironment): void {\n VtoServerClient.setEnvironment(environment);\n },\n\n getUpc(upc: string): Promise {\n return GlassesHelper.isUpcSupported(upc).catch(() => {\n throw new UpcSupportedError(upc);\n });\n },\n\n getVideoData(\n videoId: string,\n singlePose?: number, \n ): Promise {\n return VtoServerClient.getVideo(videoId, singlePose);\n }\n};\n\nexport { VtoApi };\n","import { Store } from 'redux';\nimport * as acceptanceConfig from '../config/acceptance';\nimport * as developmentConfig from '../config/development';\nimport * as developmentLocalServerConfig from '../config/development-localserver';\nimport * as integrationConfig from '../config/integration';\nimport * as productionConfig from '../config/production';\nimport * as stagingConfig from '../config/staging';\nimport { InvalidEnvironmentError } from '../constants/errors';\nimport { VtoCoreEnvironment } from '../interfaces/VtoCoreEnvironment';\nimport { AppActions } from '../reducers/appReducer';\nimport { RootState } from '../reducers/combinedReducers';\nimport { VtoApi } from '../VtoApi';\nimport { AnalyticsHelper } from './AnalyticsHelper';\n\nconst setEnvironment = (environment: VtoCoreEnvironment, store: Store): void => {\n let config: Config;\n switch (environment) {\n case 'development':\n config = {\n ...developmentConfig,\n vtoCoreEnvironment: developmentConfig.vtoCoreEnvironment as VtoCoreEnvironment,\n vtoServerEnvironment: developmentConfig.vtoServerEnvironment as VtoServerEnvironment\n };\n break;\n case 'development-localserver':\n config = {\n ...developmentLocalServerConfig,\n vtoCoreEnvironment: developmentLocalServerConfig.vtoCoreEnvironment as VtoCoreEnvironment,\n vtoServerEnvironment: developmentLocalServerConfig.vtoServerEnvironment as VtoServerEnvironment\n };\n break;\n case 'staging':\n config = {\n ...stagingConfig,\n vtoCoreEnvironment: stagingConfig.vtoCoreEnvironment as VtoCoreEnvironment,\n vtoServerEnvironment: stagingConfig.vtoServerEnvironment as VtoServerEnvironment\n };\n break;\n case 'integration':\n config = {\n ...integrationConfig,\n vtoCoreEnvironment: integrationConfig.vtoCoreEnvironment as VtoCoreEnvironment,\n vtoServerEnvironment: integrationConfig.vtoServerEnvironment as VtoServerEnvironment\n };\n break;\n case 'acceptance':\n config = {\n ...acceptanceConfig,\n vtoCoreEnvironment: acceptanceConfig.vtoCoreEnvironment as VtoCoreEnvironment,\n vtoServerEnvironment: acceptanceConfig.vtoServerEnvironment as VtoServerEnvironment\n };\n break;\n case 'production':\n config = {\n ...productionConfig,\n vtoCoreEnvironment: productionConfig.vtoCoreEnvironment as VtoCoreEnvironment,\n vtoServerEnvironment: productionConfig.vtoServerEnvironment as VtoServerEnvironment\n };\n break;\n default:\n throw new InvalidEnvironmentError(environment);\n }\n VtoApi.setEnvironment(config.vtoServerEnvironment);\n AnalyticsHelper.config = config;\n store.dispatch(AppActions.setConfig(config));\n};\n\nexport { setEnvironment };\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../../package.json';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'LocalizationHelper');\n\nexport class LocalizationHelper {\n\n private static baseUrl = 'https://d5nhc6q3o19l2.cloudfront.net';\n private static translationType = 'CORE';\n private static localeMap = {\n de: 'de-DE',\n en: 'en-US',\n es: 'es-ES',\n fr: 'fr-FR',\n it: 'it-IT',\n ja: 'ja-JP',\n ko: 'ko-KR',\n nl: 'nl-NL',\n pl: 'pl-PL',\n pt: 'pt-PT',\n sv: 'sv-SE',\n tr: 'tr-TR',\n zh: 'zh-CN'\n };\n\n private static defaultTranslations = {\n CORE: {\n PERMISSION_ERROR: {\n ERROR: 'You must allow access to your camera to create a Virtual Model.',\n SUBTEXT: 'Click the Share or Allow button above to enable your webcam.'\n },\n WEBCAM_ERROR: {\n ERROR: 'We could not detect your webcam.',\n SUBTEXT: 'Enable webcam access in your browser and refresh the page to continue.'\n },\n RENDER_VTO: {\n CLICK_AND_MOVE: 'Click and move left and right',\n ROTATE: 'Click and drag to rotate',\n SLIDE_DESKTOP: 'Drag the pointer along the nose to adjust the frames',\n SLIDE_TWO_FINGERS: 'Use two fingers to adjust on the nose',\n SWIPE_TWO_FINGERS: 'Use one finger to swipe left and right'\n },\n RENDER_ERROR: {\n TITLE_1: 'Oops',\n TITLE_2: 'We couldn\\'t retrieve your Virtual Model.',\n TITLE_3: 'Please try again later.'\n },\n UPC_MISSING: {\n TITLE: 'Virtual Model Coming Soon For This Option'\n }\n }\n };\n\n private static localizedTranslations;\n\n private static fetchLocalization = (\n environment: VtoCoreEnvironment,\n locale: string\n ): Promise<{\n [key: string]: string\n }> => {\n\n let textEnv;\n switch (environment) {\n case 'development':\n case 'development-localserver':\n textEnv = 'dev';\n break;\n case 'staging':\n case 'integration':\n case 'acceptance':\n textEnv = 'test';\n break;\n case 'production':\n textEnv = 'prod';\n break;\n default:\n break;\n }\n\n return fetch(`${LocalizationHelper.baseUrl}/vto/v1/${textEnv}/ui/application_${locale}.json`)\n .then((response) => {\n if (response.ok) {\n return response.json();\n } else {\n throw Error(`failed to find localization for locale: ${locale}`);\n }\n }).then((json) => {\n return json;\n });\n }\n\n private static localizationPromise = (\n environment: VtoCoreEnvironment,\n locale: string\n ) => {\n let language = locale.split('-')[0];\n if (!LocalizationHelper.localeMap[language]) {\n logger.error('Unknown language, falling back to english');\n language = 'en';\n locale = 'en-US';\n }\n return new Promise((resolve) => {\n let translationFound = false;\n LocalizationHelper.fetchLocalization(environment, locale)\n .then((translation) => {\n translationFound = true;\n resolve(translation);\n }).catch(() => {\n logger.error(`failed to find localization for locale: ${locale}`);\n }).then(() => {\n if (!translationFound) {\n return LocalizationHelper.fetchLocalization(environment, LocalizationHelper.localeMap[language]);\n } else {\n throw Error('break');\n }\n }).then((fallbackTranslation) => {\n translationFound = true;\n resolve(fallbackTranslation);\n }).catch(() => {\n if (!translationFound) {\n logger.error(`failed to find localization for locale: ${LocalizationHelper.localeMap[language]}`);\n }\n }).then(() => {\n if (!translationFound) {\n return LocalizationHelper.fetchLocalization(environment, 'en-US');\n } else {\n throw Error('break');\n }\n }).then((englishTranslation) => {\n translationFound = true;\n resolve(englishTranslation);\n }).catch(() => {\n if (!translationFound) {\n logger.error('failed to find localization for locale: en-US');\n }\n }).then(() => {\n if (!translationFound) {\n resolve(LocalizationHelper.defaultTranslations);\n }\n });\n });\n }\n\n static initialize(\n environment: VtoCoreEnvironment,\n locale: string\n ) {\n return this.localizationPromise(environment, locale).then((localTranslations) => {\n this.localizedTranslations = localTranslations;\n });\n }\n\n static getString(\n page: string,\n key: string\n ): string {\n let text = '';\n\n try {\n text = this.localizedTranslations[this.translationType][page][key];\n } catch (e) {\n logger.warn(`local translation not found for [${this.translationType}][${page}][${key}]`);\n try {\n text = this.defaultTranslations[this.translationType][page][key];\n } catch (e) {\n logger.warn(`default translation not found for [${this.translationType}][${page}][${key}]`);\n }\n }\n\n return text;\n }\n}","import { AnalyticsConfig } from './AnalyticsConfig';\nimport { VtoCoreEnvironment } from './VtoCoreEnvironment';\n\ninterface VtoCallbacks {\n onTransitionAnimation?: (opacityValue: number) => void;\n onTransitionAnimationEnd?: (opacityValue: number) => void;\n}\ninterface InitializeOptions {\n environment: VtoCoreEnvironment,\n locale: string,\n brand: string,\n storeId: string,\n videoCacheLimit?: number,\n glassesCacheLimit?: number\n analyticsConfig?: AnalyticsConfig,\n callbacks?: VtoCallbacks,\n}\n\nconst defaultInitializeOptions: Partial = {\n locale: 'en-US',\n brand: 'undefined',\n storeId: undefined,\n videoCacheLimit: 500,\n glassesCacheLimit: 500,\n analyticsConfig: {},\n}\n\nexport {\n InitializeOptions,\n defaultInitializeOptions,\n VtoCallbacks\n}","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { GlUtils } from '@luxottica/vm-renderer-threejs';\nimport { Store } from 'redux';\nimport { name, version } from '../../package.json';\nimport { InitializationError, InvalidParametersError, VtoError } from '../constants/errors';\nimport { AnalyticsHelper } from '../helpers/AnalyticsHelper';\nimport { setCallbacks } from '../helpers/CallbackHelper';\nimport { setEnvironment } from '../helpers/EnvironmentHelper';\nimport { LocalizationHelper } from '../helpers/LocalizationHelper';\nimport { isNumber, isObject, isString, mergeDeep } from '../helpers/ParameterHelper';\nimport { defaultInitializeOptions, InitializeOptions } from '../interfaces/InitializeOptions';\nimport { isVtoCoreEnvironment } from '../interfaces/VtoCoreEnvironment';\nimport { AppActions } from '../reducers/appReducer';\nimport { RootState } from '../reducers/combinedReducers';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'InitializeFunction');\n\nconst validateInitializeOptions = (options: InitializeOptions) => {\n if (options.environment && !isVtoCoreEnvironment(options.environment)) {\n throw new InvalidParametersError('environment');\n }\n if (options.locale && !isString(options.locale)) {\n throw new InvalidParametersError('locale');\n }\n if (options.brand && !isString(options.brand)) {\n throw new InvalidParametersError('brand');\n }\n if (options.storeId && !isString(options.storeId)) {\n throw new InvalidParametersError('storeId');\n }\n if (options.videoCacheLimit !== undefined\n && (!isNumber(options.videoCacheLimit) || options.videoCacheLimit < 1)) {\n throw new InvalidParametersError('videoCacheLimit');\n }\n if (options.glassesCacheLimit !== undefined\n && (!isNumber(options.glassesCacheLimit) || options.glassesCacheLimit < 1)) {\n throw new InvalidParametersError('videoCacheLimit');\n }\n if (options.analyticsConfig && !isObject(options.analyticsConfig)) {\n throw new InvalidParametersError('analyticsConfig');\n }\n};\n\nconst InitializeFunction = (\n store: Store,\n options: InitializeOptions,\n onSuccess: (supportedFeatures: {\n webglRendering: boolean\n }) => void,\n onError: (error: VtoError) => void,\n): void => {\n logger.debug('initializing vto');\n\n let mergedOptions: Required;\n try {\n validateInitializeOptions(options);\n mergedOptions = mergeDeep(defaultInitializeOptions, options);\n\n if (mergedOptions.environment !== store.getState().app.config.vtoCoreEnvironment) {\n setEnvironment(mergedOptions.environment, store);\n }\n\n setCallbacks(options.callbacks);\n store.dispatch(AppActions.setAnalyticsConfig(mergedOptions.analyticsConfig));\n } catch (error: unknown) {\n if (error instanceof VtoError) {\n onError(error);\n } else {\n onError(new InitializationError());\n }\n return;\n }\n\n LocalizationHelper.initialize(\n mergedOptions.environment,\n mergedOptions.locale\n ).then(() => {\n\n const supportedFeatures = {\n webglRendering: GlUtils.supportsRendering()\n };\n\n AnalyticsHelper.initialize(\n mergedOptions.analyticsConfig,\n mergedOptions.locale,\n mergedOptions.brand,\n mergedOptions.storeId,\n supportedFeatures\n );\n\n AnalyticsHelper.onInitializeSuccess();\n onSuccess(supportedFeatures);\n\n }).catch((error: VtoError) => {\n AnalyticsHelper.onInitializeError();\n onError(error);\n });\n}\n\nexport {\n InitializeFunction\n};\n","declare type VtoCoreEnvironment = 'development' | 'development-localserver' | 'staging' | 'integration' | 'acceptance' | 'production';\n\nconst isVtoCoreEnvironment = (env: string): env is VtoCoreEnvironment => {\n return [\n 'development',\n 'development-localserver',\n 'staging',\n 'integration',\n 'acceptance',\n 'production'\n ].includes(env);\n}\n\nexport { VtoCoreEnvironment, isVtoCoreEnvironment }","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../../package.json';\nimport { InvalidParametersError, UpcSupportedError, VtoError } from '../constants/errors';\nimport { isString } from '../helpers/ParameterHelper';\nimport { IsUpcSupportedOptions } from '../interfaces/IsUpcSupportedOptions';\nimport { VtoApi } from '../VtoApi';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'IsUpcSupportedFunction');\n\nconst validateIsUpcSupportedOptions = (options: IsUpcSupportedOptions) => {\n if (!options.upc || !isString(options.upc)) {\n throw new InvalidParametersError('upc');\n }\n};\n\nconst IsUpcSupportedFunction = (\n options: IsUpcSupportedOptions,\n onSuccess: (supported: boolean) => void,\n onError: (error: VtoError) => void,\n): void => {\n logger.debug('checking if upc is supported with upc={}', options.upc);\n\n try {\n validateIsUpcSupportedOptions(options);\n } catch (error: unknown) {\n if (error instanceof VtoError) {\n onError(error);\n } else {\n onError(new UpcSupportedError(options.upc));\n }\n return;\n }\n\n VtoApi.getUpc(options.upc).then((supported: boolean) => {\n logger.debug('upc catalog has responded with upc={}, isSupported={}', options.upc, supported);\n onSuccess(supported);\n }).catch((error: VtoError) => {\n onError(error);\n });\n}\n\nexport {\n IsUpcSupportedFunction\n};\n","import * as React from 'react';\nimport './LoadingSpinner.scss';\n\nexport interface LoadingSpinnerProps {\n showPercentage: boolean;\n width: number;\n height: number;\n percentage?: number;\n}\nexport interface LoadingSpinnerState {\n size: number;\n}\n\nexport class LoadingSpinner extends React.Component<\n LoadingSpinnerProps,\n LoadingSpinnerState\n> {\n\n constructor(props: LoadingSpinnerProps) {\n super(props);\n this.state = {\n size: (props.width <= props.height) ? props.width : props.height\n };\n }\n\n render() {\n const size = (this.props.width <= this.props.height)\n ? this.props.width : this.props.height;\n return (\n
\n
\n
\n
\n
\n );\n }\n}\n","import { Catalog, CatalogConfiguration } from '@luxottica/vm-glasses';\nimport { CallbackHelper } from './CallbackHelper';\n\nconst transitionLensMap: TransitionLenses = {};\nlet transitionOpacity = 0.0;\nlet transitionLensName;\nlet finalOpacity: number;\n\nlet animationEnabled = false;\nlet animateForward = false;\nlet animationStartTime: number;\nlet animationDuration: number;\n\nconst computePartialAnimation = (\n forward: boolean,\n duration: number,\n currentOpacity: number\n): number => {\n return forward ?\n Date.now() - (duration * currentOpacity)\n :\n Date.now() - (duration * (1 - currentOpacity));\n};\n\nconst TransitionColorHelper = {\n downloadTransitionColors: (config: CatalogConfiguration): Promise => {\n if (Object.keys(transitionLensMap).length !== 0) {\n return Promise.resolve();\n\n } else {\n return Catalog.downloadTransitionLenses(config).then((colorMap) => {\n Object.keys(colorMap).map((colorName) => {\n transitionLensMap[colorName] = colorMap[colorName];\n });\n });\n }\n },\n\n setTransitionOverrideColor: (color: TransitionLens) => {\n transitionLensMap.OVERRIDE = color;\n },\n\n reset: () => {\n animationEnabled = false;\n finalOpacity = undefined;\n },\n\n startAnimation: (duration: number) => {\n if (!animationEnabled) {\n animationEnabled = true;\n animationDuration = duration;\n animateForward = transitionOpacity < 0.5;\n animationStartTime = (transitionOpacity % 1 === 0) ?\n Date.now() : computePartialAnimation(animateForward, animationDuration, transitionOpacity);\n finalOpacity = undefined;\n }\n },\n\n getTransitionLens: (lensName: string): TransitionLens => {\n return transitionLensMap?.[lensName];\n },\n\n getCurrentTransitionLens: (): TransitionLens => {\n return transitionLensMap?.[transitionLensName];\n },\n\n setCurrentTransitionLens(lensName: string){\n transitionLensName = lensName;\n },\n\n setCurrentTransitionLensName(): string {\n return transitionLensName;\n },\n\n setCurrentLensOpacity: (inputOpacity: number): void => {\n TransitionColorHelper.reset();\n transitionOpacity = inputOpacity;\n },\n\n getCurrentLensOpacity: (): number => {\n if (finalOpacity !== undefined || !animationEnabled) {\n return transitionOpacity;\n\n } else {\n let animationProgress = (Date.now() - animationStartTime) / animationDuration;\n if (animationProgress >= 1.0) {\n animationProgress = 1.0;\n animationEnabled = false;\n }\n transitionOpacity = (animateForward) ? animationProgress : (1.0 - animationProgress);\n if (animationProgress === 1.0) {\n finalOpacity = transitionOpacity;\n CallbackHelper.onTransitionAnimationEnd(finalOpacity);\n }\n\n CallbackHelper.onTransitionAnimation(transitionOpacity);\n return transitionOpacity;\n }\n }\n};\n\nexport { TransitionColorHelper };\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../../package.json';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'DownloadHelper');\n\nexport default class DownloadHelper {\n static download(url): Promise {\n return new Promise((resolve, reject) => {\n fetch(url)\n .then((response: Response) => {\n if (response.ok) {\n resolve(response.blob());\n } else {\n reject('Download Error');\n }\n });\n });\n }\n\n static detectPupils(\n centerImage: Blob\n ): Promise {\n\n const form = new FormData();\n form.append('myFile', centerImage, 'myFile');\n return fetch('https://pupil-detector.luxdeepblue.com/process', {\n method: 'POST',\n body: form\n }).then((response) => {\n if (response.ok) {\n return response.json();\n } else {\n return Promise.reject();\n }\n }).then((json) => {\n return {\n face: json.v2.face,\n image: json.v2.image,\n iris: json.v2.iris,\n imagePupils: {\n ...json.v2.pupils,\n detected: (json?.v2?.pupils?.detected === 'true') ? true : false\n }\n };\n }).catch((e) => {\n logger.error(e);\n throw new Error('failed to detect pupils');\n });\n\n }\n}","import * as React from 'react';\n\nexport class RotateIcon extends React.PureComponent {\n\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import * as React from 'react';\n\ninterface PupilOverlayProps {\n faceData: VideoFaceData;\n}\n\nexport class PupilOverlay extends React.PureComponent<\n PupilOverlayProps\n> {\n shouldRender(): boolean {\n return (this.props.faceData?.pupils?.left !== undefined\n && this.props.faceData?.pupils?.right !== undefined);\n }\n\n render() {\n return (this.shouldRender()) ? (\n <>\n
\n
\n \n ) : null;\n }\n}\n","export const OverlayHelper = {\n imageToRenderCoordinates: (\n position: {x: number, y: number},\n inputImageSize: {width: number, height: number},\n cropOffset: {x: number, y: number},\n screenSpaceRatio: {width: number, height: number},\n outputSize: {width: number, height: number},\n ): Point => {\n return {\n x: (position.x - (cropOffset.x * inputImageSize.width)) * (outputSize.width / inputImageSize.width) * (1 / screenSpaceRatio.width),\n y: (position.y - (cropOffset.y * inputImageSize.height)) * (outputSize.height / inputImageSize.height) * (1 / screenSpaceRatio.height),\n };\n }\n};","import * as React from 'react';\nimport { OverlayHelper } from '../../../helpers/OverlayHelper';\n\ninterface PupilImageOverlayProps {\n poseIndex: number;\n faceData: VideoFaceData;\n cropOffset: {x: number, y: number};\n screenSpaceRatio: {width: number, height: number};\n canvasSize: {width: number, height: number};\n}\n\nexport class PupilImageOverlay extends React.PureComponent<\n PupilImageOverlayProps\n> {\n\n shouldRender(): boolean {\n return (this.props.faceData !== undefined\n && this.props.faceData.imagePupils?.detected\n && this.props.cropOffset !== undefined\n && this.props.poseIndex === 7);\n }\n\n convertCoordinates(inputPosition: {x: number, y: number}): Point {\n return OverlayHelper.imageToRenderCoordinates(\n {x: inputPosition.x, y: inputPosition.y},\n {width: this.props.faceData.image.width, height: this.props.faceData.image.height},\n {x: this.props.cropOffset.x, y: this.props.cropOffset.y},\n {width: this.props.screenSpaceRatio.width, height: this.props.screenSpaceRatio.height},\n {width: this.props.canvasSize.width, height: this.props.canvasSize.height},\n );\n }\n\n render() {\n if (this.shouldRender()) {\n const leftPupil = this.convertCoordinates(this.props.faceData.imagePupils.left);\n const rightPupil = this.convertCoordinates(this.props.faceData.imagePupils.right);\n return (<>\n
\n
\n );\n } else {\n return null;\n }\n }\n}\n","import * as React from 'react';\n\ninterface MeshCenterProps {\n meshCenter: Point;\n}\n\nexport class MeshCenterOverlay extends React.PureComponent<\n MeshCenterProps\n> {\n shouldRender(): boolean {\n return (this.props.meshCenter !== undefined);\n }\n\n render() {\n return (this.shouldRender()) ? (\n <>\n
\n \n ) : null;\n }\n}\n","import * as React from 'react';\nimport './RenderDebugOverlay.scss';\nimport { PupilOverlay } from './PupilOverlay';\nimport { PupilImageOverlay } from './PupilImageOverlay';\nimport { MeshCenterOverlay } from './MeshCenterOverlay';\nimport { RenderDebugOptions } from '../../../interfaces/RenderOptions';\n\ninterface RenderDebugOverlayProps {\n debugOptions: RenderDebugOptions;\n width: number;\n height: number;\n videoData: VideoData;\n poseIndex: number;\n}\n\nexport class RenderDebugOverlay extends React.PureComponent<\n RenderDebugOverlayProps\n> {\n\n render() {\n return (\n
\n {(this.props.debugOptions.showMeshCenter)\n && }\n {(this.props.debugOptions.showPupils)\n && }\n {(this.props.debugOptions.showImagePupils)\n && }\n
\n );\n }\n}\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { ThreeRender } from '@luxottica/vm-renderer-threejs';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { name, version } from '../../../package.json';\nimport { AnalyticsHelper } from '../../helpers/AnalyticsHelper';\nimport { TransitionColorHelper } from '../../helpers/TransitionColorHelper';\nimport { VtoInstanceContainer } from '../../helpers/VtoInstanceContainer';\nimport { RootState } from '../../reducers/combinedReducers';\nimport { RenderActions } from '../../reducers/renderReducer';\nimport { GlassesCache } from './cache/GlassesCache';\nimport { VideoCache } from './cache/VideoCache';\nimport { RenderDebugOverlay } from './debug/RenderDebugOverlay';\nimport { setActiveCanvas, disposeScreenshot } from '../../functions/GetScreenshot';\nimport './RenderCanvas.scss';\nimport { CallbackHelper } from '../../helpers/CallbackHelper';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'RenderCanvas');\n\ninterface RenderCanvasProps {\n actions?: typeof RenderActions;\n divId: string;\n renderKey?: number;\n video?: VideoData;\n videoStatus?: RenderStatus;\n glasses?: GlassesData;\n glassesStatus?: RenderStatus;\n instance?: InstanceData;\n}\n\nclass RenderCanvas extends React.Component<\n RenderCanvasProps\n> {\n\n vtoRenderer: ThreeRender;\n canvas: React.RefObject;\n previouslyRenderedKey = -1;\n\n constructor(props: RenderCanvasProps) {\n super(props);\n this.canvas = React.createRef();\n props.actions.setRendererStatus({\n divId: props.divId,\n status: 'LOADING',\n });\n }\n\n componentDidMount() {\n setActiveCanvas(this.canvas.current);\n this.vtoRenderer = new ThreeRender(\n this.canvas.current,\n {\n debugOptions: this.props.instance.renderOptions.debugOptions,\n mirror: false,\n }\n );\n VtoInstanceContainer.instance.addRender({\n id: this.props.divId,\n render: this.vtoRenderer,\n });\n\n this.renderCanvas();\n }\n\n componentWillUnmount() {\n disposeScreenshot();\n this.vtoRenderer.destroy();\n this.vtoRenderer = null;\n }\n\n componentDidUpdate(prevProps: RenderCanvasProps) {\n this.renderCanvas(prevProps);\n }\n\n renderCanvas(prevProps?: RenderCanvasProps): void {\n\n // check if the couple UPC+VideoID is being drawn for the first time\n const sendRenderEvent = (this.props.divId !== prevProps?.divId\n || this.props.glasses?.asset.upc !== prevProps?.glasses?.asset.upc\n || this.props.glasses?.resolution !== prevProps?.glasses?.resolution\n || this.props.video?.videoId !== prevProps?.video?.videoId);\n\n const shouldRender = (this.props.videoStatus === 'READY'\n && this.props.glassesStatus === 'READY'\n && (this.props.renderKey !== this.previouslyRenderedKey\n || this.props.instance.renderOptions.poseIndex !== prevProps.instance.renderOptions.poseIndex\n || this.props.instance.renderOptions.noseIndex !== prevProps.instance.renderOptions.noseIndex)\n );\n\n if (shouldRender) {\n this.previouslyRenderedKey = this.props.renderKey;\n this.renderGlasses(sendRenderEvent);\n }\n }\n\n renderGlasses(sendRenderEvent: boolean): Promise {\n\n const instance = this.props.instance;\n const video = this.props.video;\n const glasses = this.props.glasses;\n const renderOptions = instance.renderOptions;\n\n const selectedPd = (instance.pupillaryDistance) ? instance.pupillaryDistance : video.pupillaryDistance;\n\n this.vtoRenderer.updateOptions({\n debugOptions: renderOptions.debugOptions\n });\n\n // scaling is enabled if declared from JS or if the incoming video got a pupillary distance\n const enableScaling = renderOptions.debugOptions.enableScaling || video.pupillaryDistance !== undefined;\n\n // JS pupillary distance win over video pupillary distance when enabled\n // TODO: I dont understand this at all??\n let pupillaryDistance = video.pupillaryDistance;\n if (pupillaryDistance !== undefined && renderOptions.debugOptions.enableScaling) {\n pupillaryDistance = instance.pupillaryDistance;\n }\n\n return TransitionColorHelper.downloadTransitionColors({\n env: glasses.environment\n }).then(()=>{\n return this.vtoRenderer.renderVto(\n glasses.asset,\n {\n ...video,\n pupillaryDistance,\n renderFov: undefined\n },\n enableScaling,\n renderOptions.poseIndex,\n renderOptions.noseIndex,\n undefined,\n undefined,\n renderOptions.offsetY,\n renderOptions.offsetZ,\n TransitionColorHelper.getCurrentTransitionLens(),\n TransitionColorHelper.getCurrentLensOpacity()\n );\n }).then(() => {\n\n // first success draw for videoId+UPC couple\n if (sendRenderEvent) { \n this.props.actions.setRendererStatus({\n divId: this.props.divId,\n status: 'READY',\n });\n AnalyticsHelper.onRender(glasses.asset.upc, selectedPd);\n }\n \n CallbackHelper.onRenderSuccess();\n AnalyticsHelper.onRenderPose({\n upc: glasses.asset.upc,\n pupillaryDistance: selectedPd,\n videoId: video.videoId,\n bucketSuffix: video.bucketSuffix,\n poseIndex: renderOptions.poseIndex,\n noseIndex: renderOptions.noseIndex\n });\n\n }).catch((e) => {\n this.props.actions.setRendererStatus({\n divId: this.props.divId,\n status: 'ERROR',\n });\n logger.error(e);\n AnalyticsHelper.onRenderFailure(glasses.asset.upc);\n CallbackHelper.onRenderError(e);\n });\n }\n\n private showDebugOverlay(): boolean {\n return (this.props.instance.renderOptions.debugOptions !== undefined\n && this.props.video !== undefined);\n }\n\n render() {\n return (\n <>\n \n {(this.showDebugOverlay()) &&\n \n }\n \n );\n }\n}\n\nfunction mapStateToProps(state: RootState, ownProps: RenderCanvasProps) {\n const instance = state.render.instance[ownProps.divId];\n return {\n instance: instance,\n renderKey: instance.renderKey,\n video: VideoCache.get(instance.divId),\n videoStatus: instance.videoStatus,\n glasses: GlassesCache.get(instance.divId),\n glassesStatus: instance.upcStatus\n };\n}\n\nfunction mapDispatchToProps(dispatch) {\n return {\n actions: bindActionCreators({\n ...RenderActions\n }, dispatch)\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(RenderCanvas);\n","export class MathHelper {\n\n public static clamp(\n num: number,\n min: number,\n max: number\n ): number {\n return num <= min ? min : num >= max ? max : num;\n }\n}\n","import React from 'react';\n\nconst DoubleFingerIcon = () => {\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport {\n DoubleFingerIcon\n};\n","import * as Hammer from 'hammerjs';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { AnalyticsHelper } from '../../helpers/AnalyticsHelper';\nimport { LocalizationHelper } from '../../helpers/LocalizationHelper';\nimport { MathHelper } from '../../helpers/MathHelper';\nimport { DoubleFingerIcon } from '../../icons/DoubleFingerIcon';\nimport { RenderActions } from '../../reducers/renderReducer';\nimport './SwipeableContainer.scss';\n\ninterface SwipeableContainerProps {\n actions?: typeof RenderActions;\n children?: any;\n enabled: boolean;\n instance: InstanceData;\n poseIndex: number;\n noseIndex: number;\n enableNosePosition: boolean;\n touches: number;\n width: number;\n height: number;\n upc: string;\n}\n\ninterface SwipeableContainerState {\n poseIndex: number;\n noseIndex: number;\n overlay: boolean;\n}\n\nclass SwipeableContainer extends React.Component<\n SwipeableContainerProps,\n SwipeableContainerState\n> {\n\n private firstTouch = true;\n private hammerManagerOverlay: HammerManager;\n private hammerManagerPose: HammerManager;\n private hammerManagerNose: HammerManager;\n private containerRef: React.RefObject;\n\n private readonly indexCount = 14;\n private readonly swipeSpeedModifier = 0.04;\n private readonly indexInterval = Math.round(this.props.height * this.swipeSpeedModifier);\n\n private readonly noseIndexCount = 20;\n private readonly noseSwipeSpeedModifier = 0.02;\n private readonly noseIndexInterval = Math.round(this.props.height * this.noseSwipeSpeedModifier);\n\n private previousX = undefined;\n private previousY = undefined;\n\n constructor(props) {\n super(props);\n this.containerRef = React.createRef();\n this.firstTouch = true;\n this.state = {\n poseIndex: this.props.poseIndex,\n noseIndex: this.props.noseIndex,\n overlay: false\n };\n }\n\n private initializeHammer = () => {\n this.hammerManagerPose = new Hammer.Manager(this.containerRef.current, {\n domEvents: true,\n touchAction: 'pan-x',\n recognizers: [\n [Hammer.Pan, {\n direction: Hammer.DIRECTION_HORIZONTAL,\n pointers: 1,\n }]\n ]\n });\n this.hammerManagerPose.on('panmove', this.computeIndexes);\n this.hammerManagerPose.on('panend', () => { this.previousY = undefined; });\n\n this.hammerManagerNose = new Hammer.Manager(this.containerRef.current, {\n domEvents: true,\n touchAction: 'pan-y',\n recognizers: [\n [Hammer.Pan, {\n direction: Hammer.DIRECTION_VERTICAL,\n pointers: (this.props.touches === 2) ? 2 : 1,\n }]\n ]\n });\n this.hammerManagerNose.on('panmove', this.computeIndexes);\n this.hammerManagerNose.on('panend', () => { this.previousY = undefined; });\n\n if (this.props.enableNosePosition) {\n this.hammerManagerOverlay = new Hammer.Manager(this.containerRef.current, {\n domEvents: false,\n touchAction: 'press',\n recognizers: [\n [Hammer.Press, {\n pointers: (this.props.touches === 2) ? 2 : 1,\n time: 0\n }]\n ]\n });\n this.hammerManagerOverlay.on('press', () => {\n if (this.firstTouch) {\n this.setState({ overlay: true });\n this.firstTouch = false;\n }\n });\n }\n }\n\n private destroyHammer = () => {\n this.hammerManagerOverlay?.destroy();\n this.hammerManagerNose?.destroy();\n this.hammerManagerPose?.destroy();\n }\n\n componentDidMount() {\n if (this.props.enabled) {\n this.initializeHammer();\n this.containerRef.current.addEventListener('touchstart', (event: TouchEvent) => {\n if (event.touches.length === 2) {\n // avoid scrolling when user is using two fingers\n event.preventDefault();\n }\n });\n\n this.containerRef.current.addEventListener('touchend', () => {\n this.setState({\n overlay: false\n });\n });\n\n this.containerRef.current.addEventListener('mouseup', () => {\n this.setState({\n overlay: false\n });\n });\n }\n }\n\n componentDidUpdate(prevProps: SwipeableContainerProps) {\n if (prevProps.poseIndex !== this.props.poseIndex) {\n this.setState({ poseIndex: this.props.poseIndex });\n }\n if (prevProps.noseIndex !== this.props.noseIndex) {\n this.setState({ noseIndex: this.props.noseIndex });\n }\n if (prevProps.enableNosePosition !== this.props.enableNosePosition\n || prevProps.touches !== this.props.touches) {\n this.destroyHammer();\n this.initializeHammer();\n }\n }\n\n componentWillUnmount() {\n this.destroyHammer();\n }\n\n private onSetIndex = (poseIndex) => {\n if (this.props.instance && !this.props.instance.swiped) {\n this.props.actions.swipeInstance({divId: this.props.instance.divId});\n AnalyticsHelper.onRenderSwipe(this.props.upc);\n }\n this.props.actions.setInstanceIndex({\n divId: this.props.instance.divId,\n poseIndex: poseIndex\n });\n }\n\n private onSetNoseIndex = (noseIndex) => {\n if (this.props.enableNosePosition) {\n this.props.actions.setInstanceIndex({\n divId: this.props.instance.divId,\n noseIndex: noseIndex\n });\n }\n }\n\n private computeIndexes = (\n event: HammerInput\n ): void => {\n\n if (event.direction === Hammer.DIRECTION_LEFT || event.direction === Hammer.DIRECTION_RIGHT) {\n if (event.pointers.length === 1) {\n const oldIndex = this.state.poseIndex;\n if (this.previousX === undefined) {\n this.previousX = event.center.x;\n }\n const deltaX = this.previousX - event.center.x;\n const deltaIndex = Math.round(deltaX / this.indexInterval);\n const poseIndex = MathHelper.clamp(this.state.poseIndex + deltaIndex, 0, this.indexCount);\n\n this.setState({ poseIndex: poseIndex });\n if (oldIndex !== poseIndex) {\n this.previousX = event.center.x;\n this.onSetIndex(poseIndex);\n }\n }\n\n } else if (event.direction === Hammer.DIRECTION_UP || event.direction === Hammer.DIRECTION_DOWN) {\n if (this.props.touches === 1\n || (this.props.touches === 2 && event.pointers.length === 2)) {\n\n const oldNoseIndex = this.state.noseIndex;\n if (this.previousY === undefined) {\n this.previousY = event.center.y;\n }\n const deltaY = this.previousY - event.center.y;\n const deltaIndex = Math.round(deltaY / this.noseIndexInterval);\n const noseIndex = MathHelper.clamp(this.state.noseIndex - deltaIndex, 0, this.noseIndexCount);\n\n this.setState({\n noseIndex\n });\n if (oldNoseIndex !== noseIndex) {\n this.previousY = event.center.y;\n this.onSetNoseIndex(noseIndex);\n }\n }\n }\n }\n\n render() {\n\n const notification = (this.props.touches === 2) ? <>\n \n {LocalizationHelper.getString('RENDER_VTO', 'SLIDE_TWO_FINGERS')}\n : <>\n {LocalizationHelper.getString('RENDER_VTO', 'SLIDE_DESKTOP')}\n ;\n\n if (this.props.enabled) {\n return (\n
\n {this.props.children}\n
\n {notification}\n
\n
\n );\n } else {\n return this.props.children;\n }\n }\n}\n\nfunction mapDispatchToProps(dispatch) {\n return {\n actions: bindActionCreators({\n ...RenderActions\n }, dispatch)\n };\n}\n\nexport default connect(undefined, mapDispatchToProps)(SwipeableContainer);\n","import { GlassesEnvironment } from '@luxottica/vm-glasses';\nimport { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { MeshVideoData } from '@luxottica/vm-vtoserver-client';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { name, version } from '../../../package.json';\nimport { AnalyticsHelper } from '../../helpers/AnalyticsHelper';\nimport { CallbackHelper } from '../../helpers/CallbackHelper';\nimport DownloadHelper from '../../helpers/DownloadHelper';\nimport { GlassesHelper } from '../../helpers/GlassesHelper';\nimport { LocalizationHelper } from '../../helpers/LocalizationHelper';\nimport { RotateIcon } from '../../icons/RotateIcon';\nimport { RenderActions } from '../../reducers/renderReducer';\nimport { VtoApi } from '../../VtoApi';\nimport RenderCanvas from './RenderCanvas';\nimport './RenderContainer.scss';\nimport SwipeableContainer from './SwipeableContainer';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'RenderContainer');\n\ninterface RenderContainerProps {\n actions?: typeof RenderActions;\n singlePose?: boolean;\n divId: string;\n instance: InstanceData;\n videoId: string;\n video: VideoData;\n videoStatus: RenderStatus;\n upc: string;\n resolution: AssetResolution;\n glasses: GlassesData;\n glassesStatus: RenderStatus;\n glassesEnvironment: GlassesEnvironment;\n pupillaryDistance: number;\n poseIndex: number;\n noseIndex: number;\n width: number;\n height: number;\n offsetY: number;\n offsetZ: number;\n showRotateBar: boolean;\n enableNosePosition: boolean;\n nosePositionTouches: number;\n showImagePupils: boolean;\n}\n\ninterface RenderContainerState {\n initialIndex: number;\n swiped: boolean;\n}\n\nclass RenderContainer extends React.Component<\n RenderContainerProps,\n RenderContainerState\n> {\n\n constructor(props: RenderContainerProps) {\n super(props);\n this.state = {\n initialIndex: props.poseIndex,\n swiped: false\n };\n }\n\n componentDidMount() {\n this.fetchAssets();\n }\n\n componentDidUpdate(prevProps: RenderContainerProps) {\n this.fetchAssets();\n\n if (!prevProps.showImagePupils\n && this.props.showImagePupils\n && this.props.video?.videoId !== undefined\n && this.props.video?.faceData?.imagePupils === undefined ) {\n this.fetchFaceData(this.props.divId, this.props.video.videoId, this.props.video.centerImage);\n }\n }\n\n fetchAssets() {\n\n const singlePoseIndex = this.props.singlePose ? this.props.poseIndex : undefined;\n const shouldUpdateVideo = this.props.videoStatus === undefined;\n const shouldUpdateGlasses = this.props.glassesStatus === undefined;\n\n if (shouldUpdateVideo) {\n const downloadingDivId = this.props.divId;\n const downloadingVideoId = this.props.videoId;\n this.props.actions.addVideo({ divId: downloadingDivId, videoId: downloadingVideoId });\n VtoApi.getVideoData(downloadingVideoId, singlePoseIndex)\n .then((meshVideoData: MeshVideoData) => {\n this.props.actions.setVideoData({\n divId: downloadingDivId,\n videoId: downloadingVideoId,\n videoData: {\n ...meshVideoData,\n }\n });\n if (this.props.showImagePupils && !this.props.singlePose) {\n this.fetchFaceData(downloadingDivId, meshVideoData.videoId, meshVideoData.centerImage);\n }\n }).catch((error) => {\n this.props.actions.setVideoStatus({ divId: downloadingDivId, videoId: downloadingVideoId, status: 'ERROR' });\n AnalyticsHelper.onRenderFailure(this.props.upc);\n CallbackHelper.onRenderError(error);\n });\n }\n\n if (shouldUpdateGlasses) {\n\n this.props.actions.addGlasses({\n divId: this.props.divId,\n upc: this.props.upc\n });\n\n GlassesHelper.downloadGlasses(\n this.props.upc,\n this.props.resolution,\n this.props.glassesEnvironment,\n singlePoseIndex\n ).then((glassesData) => {\n this.props.actions.setGlassesData({\n divId: this.props.divId,\n upc: this.props.upc,\n glassesData: glassesData\n });\n }).catch((error) => {\n logger.error(error);\n\n if (this.props.glassesEnvironment.startsWith('QA')) {\n logger.error('failed to download asset');\n AnalyticsHelper.onRenderFailure(this.props.upc);\n CallbackHelper.onRenderError(error);\n this.props.actions.setGlassesStatus({\n divId: this.props.divId,\n upc: this.props.upc,\n status: 'ERROR'\n });\n\n } else if (this.props.resolution === '512') {\n logger.error('failed to download 512 resolution asset, falling back to 256 resolution');\n AnalyticsHelper.onRenderFailure(this.props.upc);\n CallbackHelper.onRenderError(error);\n this.props.actions.glassesFallback({\n divId: this.props.divId,\n upc: this.props.upc,\n resolution: '256',\n });\n this.props.actions.setGlassesStatus({\n divId: this.props.divId,\n upc: this.props.upc,\n status: 'ERROR'\n });\n\n } else {\n logger.error('failed to download 256 resolution asset');\n AnalyticsHelper.onRenderFailure(this.props.upc);\n CallbackHelper.onRenderError(error);\n this.props.actions.setGlassesStatus({\n divId: this.props.divId,\n upc: this.props.upc,\n status: 'ERROR'\n });\n }\n });\n }\n }\n\n fetchFaceData = (divId: string, videoId: string, centerImage: Blob): void => {\n DownloadHelper.detectPupils(centerImage).then((faceData) => {\n this.props.actions.setVideoFaceData({\n divId: divId,\n videoId: videoId,\n videoFaceData: faceData,\n });\n }).catch((error) => {\n logger.error(error);\n });\n }\n\n onStartPan = () => {\n this.setState({\n initialIndex: this.props.poseIndex,\n swiped: true,\n });\n }\n\n shouldEnableNosePosition = () => {\n return this.props.enableNosePosition && (this.props.glasses?.asset as GltfAsset)?.fitting !== 'fast';\n }\n\n render() {\n return (\n \n
\n \n {\n (this.props.showRotateBar && !this.props.singlePose) &&\n
\n \n
\n {LocalizationHelper.getString('RENDER_VTO', 'ROTATE')}\n
\n
\n }\n
\n
\n );\n }\n}\n\nfunction mapDispatchToProps(dispatch) {\n return {\n actions: bindActionCreators({\n ...RenderActions\n }, dispatch)\n };\n}\n\nexport default connect(null, mapDispatchToProps)(RenderContainer);\n","import * as React from 'react';\nimport { findDOMNode } from 'react-dom';\nimport { LocalizationHelper } from '../../helpers/LocalizationHelper';\nimport './RenderError.scss';\n\nexport class RenderError extends React.Component {\n\n render() {\n return (\n
\n
\n \n \n \n
\n
\n {LocalizationHelper.getString('UPC_MISSING', 'TITLE')}\n
\n
\n );\n }\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { RootState } from '../../reducers/combinedReducers';\nimport { RenderActions } from '../../reducers/renderReducer';\nimport { GlassesCache } from './cache/GlassesCache';\nimport { VideoCache } from './cache/VideoCache';\nimport { LoadingSpinner } from './LoadingSpinner';\nimport RenderContainer from './RenderContainer';\nimport { RenderError } from './RenderError';\nimport './RenderLoader.scss';\n\ninterface RenderLoaderProps {\n actions?: typeof RenderActions;\n divId: string;\n instance?: InstanceData;\n video?: VideoData;\n videoStatus?: RenderStatus;\n glasses?: GlassesData;\n glassesStatus?: RenderStatus;\n rendererStatus?: RenderStatus;\n}\n\ninterface RenderLoaderState {\n LazyRenderContainer: typeof RenderContainer;\n}\n\nclass RenderLoader extends React.Component<\n RenderLoaderProps,\n RenderLoaderState\n> {\n\n constructor(props: RenderLoaderProps) {\n super(props);\n this.state = {\n LazyRenderContainer: undefined\n };\n }\n\n componentDidMount() {\n this.setState({\n LazyRenderContainer: RenderContainer\n });\n }\n\n componentWillUnmount() {\n VideoCache.delete(this.props.divId);\n GlassesCache.delete(this.props.divId);\n }\n\n shouldShowErrorScreen(): boolean {\n return (this.props.glassesStatus === 'ERROR' || this.props.videoStatus === 'ERROR' || this.props.rendererStatus === 'ERROR');\n }\n\n shouldShowLoadingScreen(): boolean {\n if (this.shouldShowErrorScreen()) {\n return false;\n } else if (this.props.glassesStatus === 'LOADING' || this.props.videoStatus === 'LOADING' || this.props.rendererStatus === 'LOADING') {\n return true;\n } else {\n return false;\n }\n }\n\n render() {\n return (\n
\n { !this.shouldShowErrorScreen()\n && this.state.LazyRenderContainer !== undefined\n && this.props.instance !== undefined &&\n \n }\n {\n this.shouldShowErrorScreen() && \n }\n {\n (this.shouldShowLoadingScreen()) ? : undefined\n }\n
\n );\n }\n}\n\nfunction mapStateToProps(state: RootState, ownProps: RenderLoaderProps) {\n const instance = state.render.instance[ownProps.divId];\n\n return {\n instance: instance,\n video: VideoCache.get(ownProps.divId),\n videoStatus: instance.videoStatus,\n glasses: GlassesCache.get(ownProps.divId),\n glassesStatus: instance.upcStatus,\n rendererStatus: instance.rendererStatus,\n };\n}\n\nfunction mapDispatchToProps(dispatch) {\n return {\n actions: bindActionCreators({\n ...RenderActions\n }, dispatch)\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(RenderLoader);\n","import { AssetResolution } from '@luxottica/vm-glasses';\n\ninterface RenderOptions {\n divId: string,\n videoId: string,\n upc: string,\n pupillaryDistance?: number,\n poseIndex?: number,\n optimizeSinglePose?: boolean,\n noseIndex?: number,\n showRotateBar?: boolean,\n enableNosePosition?: boolean,\n nosePositionTouches?: number,\n resolution?: AssetResolution,\n width?: number,\n height?: number,\n offsetY?: number,\n offsetZ?: number,\n debugOptions?: RenderDebugOptions,\n}\n\ninterface RenderDebugOptions {\n glassesEnvironment?: VtoGlassesEnvironment,\n showMesh?: boolean;\n calculatePupils?: boolean;\n showMeshCenter?: boolean;\n calculateMeshCenter?: boolean;\n showPupils?: boolean;\n showImagePupils?: boolean;\n checkError?: boolean;\n hideGlasses?: boolean;\n hideShadow?: boolean;\n hideBackground?: boolean;\n hideLenses?: boolean;\n hideFrame?: boolean;\n enableScaling?: boolean;\n meshColor?: number[];\n}\n\nconst defaultRenderDebugOptions: Partial = {\n glassesEnvironment: 'PROD' as VtoGlassesEnvironment,\n showMesh: false,\n calculatePupils: false,\n showMeshCenter: false,\n calculateMeshCenter: false,\n showPupils: false,\n showImagePupils: false,\n checkError: false,\n hideGlasses: false,\n hideShadow: false,\n hideBackground: false,\n hideLenses: false,\n hideFrame: false,\n enableScaling: false,\n meshColor: [0.0, 1.0, 0.0, 0.5]\n}\n\nconst defaultRenderOptions: Partial = {\n poseIndex: 7,\n noseIndex: 0,\n showRotateBar: true,\n enableNosePosition: true,\n nosePositionTouches: 1,\n resolution: '512',\n width: 480,\n height: 480,\n offsetY: 0,\n offsetZ: 0,\n debugOptions: defaultRenderDebugOptions\n}\n\n\nexport { RenderOptions, RenderDebugOptions, defaultRenderOptions }","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { Store } from 'redux';\nimport { GlassesEnvironment } from '@luxottica/vm-glasses';\nimport { name, version } from '../../package.json';\nimport RenderLoader from '../app/render/RenderLoader';\nimport { InvalidParametersError, RenderingError, UnknownError, VtoError } from '../constants/errors';\nimport { AnalyticsHelper } from '../helpers/AnalyticsHelper';\nimport { GlassesHelper } from '../helpers/GlassesHelper';\nimport { MathHelper } from '../helpers/MathHelper';\nimport { isBoolean, isNumber, isString, mergeDeep, stringToNumber } from '../helpers/ParameterHelper';\nimport { VtoInstanceContainer } from '../helpers/VtoInstanceContainer';\nimport { defaultRenderOptions, RenderOptions } from '../interfaces/RenderOptions';\nimport { RootState } from '../reducers/combinedReducers';\nimport { RenderActions } from '../reducers/renderReducer';\nimport { ROOT_STYLE_NAME } from '../constants/Styling';\nimport { GlassesCache } from '../app/render/cache/GlassesCache';\nimport { VideoCache } from '../app/render/cache/VideoCache';\nimport { CallbackHelper, setCallbacks, setRenderErrorCallback, setRenderSuccessCallback } from '../helpers/CallbackHelper';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'RenderFunction');\n\nlet renderCount = 0;\n\nconst validateRenderOptions = (options: RenderOptions) => {\n if (!options.divId || !isString(options.divId)) {\n throw new InvalidParametersError('divId');\n }\n if (!options.videoId || !isString(options.videoId)) {\n throw new InvalidParametersError('videoId');\n }\n if (!options.upc || !isString(options.upc)) {\n throw new InvalidParametersError('upc');\n }\n if (options.pupillaryDistance !== undefined\n && (!isNumber(options.pupillaryDistance) || options.pupillaryDistance < 1)) {\n throw new InvalidParametersError('pupillaryDistance');\n }\n if (options.poseIndex !== undefined\n && (!isNumber(options.poseIndex) || options.poseIndex < 0)) {\n throw new InvalidParametersError('poseIndex');\n }\n if (options.noseIndex !== undefined\n && (!isNumber(options.noseIndex) || options.noseIndex < 0)) {\n throw new InvalidParametersError('noseIndex');\n }\n if (options.showRotateBar !== undefined && !isBoolean(options.showRotateBar)) {\n throw new InvalidParametersError('showRotateBar');\n }\n if (options.enableNosePosition !== undefined && !isBoolean(options.enableNosePosition)) {\n throw new InvalidParametersError('enableNosePosition');\n }\n if (options.nosePositionTouches !== undefined\n && (!isNumber(options.nosePositionTouches) || options.nosePositionTouches < 1)) {\n throw new InvalidParametersError('nosePositionTouches');\n }\n if (options.resolution && !['256', '512'].includes(options.resolution)) {\n throw new InvalidParametersError('resolution');\n }\n if (options.width !== undefined\n && (!isNumber(options.width) || options.width < 1)) {\n throw new InvalidParametersError('width');\n }\n if (options.height !== undefined\n && (!isNumber(options.height) || options.height < 1)) {\n throw new InvalidParametersError('height');\n }\n if (options.offsetY !==undefined\n && !isNumber(options.offsetY)) {\n throw new InvalidParametersError('offsetY');\n }\n if (options.offsetZ!==undefined\n && !isNumber(options.offsetZ)) {\n throw new InvalidParametersError('offsetZ');\n }\n if (options.debugOptions) {\n if (options.debugOptions.glassesEnvironment !== undefined \n && !Object.keys(GlassesEnvironment).includes(options.debugOptions.glassesEnvironment)) {\n throw new InvalidParametersError('glassesEnvironment');\n }\n if (options.debugOptions.showMesh !== undefined && !isBoolean(options.debugOptions.showMesh)) {\n throw new InvalidParametersError('showMesh');\n }\n if (options.debugOptions.showMeshCenter !== undefined && !isBoolean(options.debugOptions.showMeshCenter)) {\n throw new InvalidParametersError('showMeshCenter');\n }\n if (options.debugOptions.showPupils !== undefined && !isBoolean(options.debugOptions.showPupils)) {\n throw new InvalidParametersError('showPupils');\n }\n if (options.debugOptions.showImagePupils !== undefined && !isBoolean(options.debugOptions.showImagePupils)) {\n throw new InvalidParametersError('showImagePupils');\n }\n if (options.debugOptions.checkError !== undefined && !isBoolean(options.debugOptions.checkError)) {\n throw new InvalidParametersError('checkError');\n }\n if (options.debugOptions.hideGlasses !== undefined && !isBoolean(options.debugOptions.hideGlasses)) {\n throw new InvalidParametersError('hideGlasses');\n }\n if (options.debugOptions.hideShadow !== undefined && !isBoolean(options.debugOptions.hideShadow)) {\n throw new InvalidParametersError('hideShadow');\n }\n if (options.debugOptions.hideBackground !== undefined && !isBoolean(options.debugOptions.hideBackground)) {\n throw new InvalidParametersError('hideBackground');\n }\n if (options.debugOptions.hideLenses !== undefined && !isBoolean(options.debugOptions.hideLenses)) {\n throw new InvalidParametersError('hideLenses');\n }\n if (options.debugOptions.hideFrame !== undefined && !isBoolean(options.debugOptions.hideFrame)) {\n throw new InvalidParametersError('hideFrame');\n }\n if (options.debugOptions.enableScaling !== undefined && !isBoolean(options.debugOptions.enableScaling)) {\n throw new InvalidParametersError('enableScaling');\n }\n if (options.debugOptions.meshColor && (options.debugOptions.meshColor.length !== 4\n || !isNumber(options.debugOptions.meshColor[0])\n || !isNumber(options.debugOptions.meshColor[1])\n || !isNumber(options.debugOptions.meshColor[2])\n || !isNumber(options.debugOptions.meshColor[3])\n )) {\n throw new InvalidParametersError('meshColor');\n }\n }\n};\n\nconst RenderFunction = (\n store: Store,\n options: RenderOptions,\n onSuccess: () => void,\n onError: (error: VtoError) => void,\n): void => {\n logger.debug('rendering vto with videoId={}', options?.videoId);\n renderCount++;\n\n try {\n validateRenderOptions(options);\n } catch (error: unknown) {\n if (error instanceof VtoError) {\n onError(error);\n } else if (error instanceof Error){\n onError(new UnknownError(error));\n } else {\n logger.error(error);\n }\n return;\n }\n \n const mergedOptions: Required = mergeDeep(defaultRenderOptions, options);\n \n try {\n mergedOptions.pupillaryDistance = stringToNumber(mergedOptions.pupillaryDistance);\n mergedOptions.poseIndex = MathHelper.clamp(mergedOptions.poseIndex, 0 , 14);\n mergedOptions.noseIndex = MathHelper.clamp(mergedOptions.noseIndex, 0 , 20);\n\n mergedOptions.debugOptions.calculatePupils = mergedOptions.debugOptions.showPupils;\n mergedOptions.debugOptions.calculateMeshCenter = mergedOptions.debugOptions.showMeshCenter;\n\n if (store.getState().render.instance[mergedOptions.divId]?.upcStatus === 'ERROR') {\n AnalyticsHelper.onRenderFailure(mergedOptions.upc);\n CallbackHelper.onRenderError(new RenderingError(mergedOptions.upc));\n }\n\n // if the video id exists and is in error state VTO wants to retry a render\n // this because microservices are highly asynchronous and is possible that the same\n // VTO instance can find an existing video after a retry\n if (store.getState().render.instance[mergedOptions.divId]?.videoStatus === 'ERROR') {\n store.dispatch(\n RenderActions.deleteVideoData({ divId: mergedOptions.divId })\n );\n }\n\n const container = document.getElementById(mergedOptions.divId);\n const validUpc = (mergedOptions.upc && mergedOptions.upc.includes('|'))\n ? mergedOptions.upc.split('|').join('-') : mergedOptions.upc;\n VtoInstanceContainer.instance.addVto(mergedOptions.divId);\n\n // reset upcStatus if upc has changed\n const currentInstance = store.getState().render.instance[mergedOptions.divId];\n\n let newVideoStatus;\n if (currentInstance === undefined\n || mergedOptions.videoId !== currentInstance.videoId\n || mergedOptions.optimizeSinglePose !== currentInstance.renderOptions.optimizeSinglePose\n || (mergedOptions.optimizeSinglePose && mergedOptions.poseIndex !== currentInstance.renderOptions.poseIndex)) {\n newVideoStatus = undefined;\n VideoCache.delete(mergedOptions.divId);\n } else {\n newVideoStatus = currentInstance?.videoStatus;\n }\n\n let newGlassesStatus;\n if (currentInstance === undefined\n || mergedOptions.upc !== currentInstance.upc\n || mergedOptions.debugOptions.glassesEnvironment !== currentInstance.glassesEnvironment\n || mergedOptions.resolution !== currentInstance.renderOptions.resolution\n || mergedOptions.optimizeSinglePose !== currentInstance.renderOptions.optimizeSinglePose\n || (mergedOptions.optimizeSinglePose && mergedOptions.poseIndex !== currentInstance.renderOptions.poseIndex)) {\n newGlassesStatus = undefined;\n GlassesCache.delete(mergedOptions.divId);\n } else {\n newGlassesStatus = currentInstance?.upcStatus;\n }\n\n store.dispatch(RenderActions.updateInstance({\n divId: mergedOptions.divId,\n glassesEnvironment: mergedOptions.debugOptions.glassesEnvironment,\n renderKey: renderCount,\n swiped: false,\n upc: validUpc,\n upcStatus: newGlassesStatus,\n videoId: mergedOptions.videoId,\n videoStatus: newVideoStatus,\n pupillaryDistance: mergedOptions.pupillaryDistance,\n renderOptions: mergedOptions,\n rendererStatus: undefined,\n }));\n\n if (!!container) {\n container.classList.add(ROOT_STYLE_NAME);\n }\n\n if (!!onSuccess) { setRenderSuccessCallback(onSuccess); }\n if (!!onError) { setRenderErrorCallback(onError); }\n\n ReactDOM.render(\n \n \n ,\n container\n );\n } catch (error) {\n if (error instanceof VtoError) {\n onError(error);\n } else if (error instanceof Error){\n onError(new RenderingError(mergedOptions.upc));\n } else {\n onError(new UnknownError(error));\n }\n }\n}\n\nexport {\n RenderFunction\n};\n","const ROOT_STYLE_NAME = 'vto-core-module-root-style';\n\nexport {\n ROOT_STYLE_NAME\n};","import { combineReducers } from 'redux';\nimport { AppReducer } from './appReducer';\nimport { RenderReducer } from './renderReducer';\n\nexport interface RootState {\n app: AppStoreState;\n render: RenderStoreState;\n}\n\nexport default combineReducers({\n app: AppReducer,\n render: RenderReducer,\n});\n","import { AssetResolution, GlassesEnvironment, TransitionLens } from '@luxottica/vm-glasses';\nimport { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../package.json';\nimport { VtoError } from './constants/errors';\nimport { CloseRenderFunction } from './functions/CloseRenderFunction';\nimport { downloadTransitionColorCatalogue } from './functions/DownloadTransitionColorCatalogue';\nimport { getScreenshot, Screenshot } from './functions/GetScreenshot';\nimport { InitializeFunction } from './functions/InitializeFunction';\nimport { IsUpcSupportedFunction } from './functions/IsUpcSupportedFunction';\nimport { RenderFunction } from './functions/RenderFunction';\nimport { setTransitionLensName } from './functions/setTransitionLensName';\nimport { setTransitionOpacity } from './functions/SetTransitionOpacity';\nimport { setTransitionOverrideColor } from './functions/SetTransitionOverrideColor';\nimport { setEnvironment } from './helpers/EnvironmentHelper';\nimport { AnalyticsConfig } from './interfaces/AnalyticsConfig';\nimport { CloseRenderOptions } from './interfaces/CloseRenderOptions';\nimport { InitializeOptions } from './interfaces/InitializeOptions';\nimport { IsUpcSupportedOptions } from './interfaces/IsUpcSupportedOptions';\nimport { RenderDataResponse } from './interfaces/RenderDataResponse';\nimport { RenderOptions } from './interfaces/RenderOptions';\nimport { VtoCoreEnvironment } from './interfaces/VtoCoreEnvironment';\nimport { configureStore } from './Store';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'VtoCore');\n\nconst store = configureStore();\n\nconst setVtoEnvironment = (environment: VtoCoreEnvironment) => {\n setEnvironment(environment, store);\n};\n\nconst errorWrapper = (errorFunction: (error: VtoError) => void): (error: VtoError) => void => {\n return (error: VtoError) => {\n logger.error(error);\n if (errorFunction) {\n errorFunction(error);\n }\n }\n}\n\nconst VtoCore = {\n\n /**\n * Initializes VtoCore component\n * Use 'initialize' to setup the vto client. This function should be called on every browser page with vto enabled. If passed an empty userId, the service will create a new one for you. If passed an existing userId, the service will validate that the user id exists.\n * \n * Available locales: de-DE, en-US, es-ES, fr-FR, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-PT, sv-SE, tr-TR, zh-CN, zh-HK, zh-TW\n * \n * Make sure to save the valid userId on the client and pass this into subsequent calls to 'initialize'.\n * \n * Supported features will also be returned from successful initialization. This tells the client whether it supports capture and rendering.\n * \n * Depending on the platform and supportFeatures, the client should then execute either 'fileCapture' or 'webcamCapture'\n * \n * @param options - InitializeOptions\n * @param onSuccess - onSuccess\n * @param onError - onError\n */\n initialize(\n options: InitializeOptions,\n onSuccess: (supportedFeatures: {\n webglRendering: boolean\n }) => void,\n onError: (error: VtoError) => void = () => { return; }\n ): void {\n InitializeFunction(store, options, onSuccess, errorWrapper(onError));\n },\n\n isUpcSupported(\n options: IsUpcSupportedOptions,\n onSuccess: (supported: boolean) => void,\n onError: (error: VtoError) => void = () => { return; }\n ): void {\n IsUpcSupportedFunction(options, onSuccess, errorWrapper(onError));\n },\n\n render(\n options: RenderOptions,\n onSuccess: () => void,\n onError: (error: VtoError) => void = () => { return; }\n ): void {\n RenderFunction(store, options, onSuccess, errorWrapper(onError));\n },\n\n closeRender(\n options: CloseRenderOptions,\n onSuccess: () => void,\n onError: (error: VtoError) => void = () => { return; }\n ): void {\n CloseRenderFunction(store, options, onSuccess, errorWrapper(onError));\n },\n\n setTransitionOpacity(opacity: number): void {\n return setTransitionOpacity(opacity);\n },\n\n setTransitionOverrideColor(transitionLens: TransitionLens): void {\n return setTransitionOverrideColor(transitionLens);\n },\n \n setTransitionColorName(colorName: string): void {\n return setTransitionLensName(colorName);\n },\n\n downloadTransitionColorCatalogue(environment: GlassesEnvironment): Promise> {\n return downloadTransitionColorCatalogue(environment);\n },\n\n getScreenshot(type = 'image/jpeg', quality = 0.9): Promise {\n return getScreenshot(type, quality);\n }\n};\n\nsetVtoEnvironment('production');\nlogger.debug('VtoCore loaded');\n\nexport {\n VtoCore,\n VtoError,\n VtoCoreEnvironment,\n AssetResolution,\n AnalyticsConfig,\n InitializeOptions,\n IsUpcSupportedOptions,\n RenderDataResponse,\n RenderOptions,\n CloseRenderOptions,\n setVtoEnvironment\n};\n","import { compose, createStore, Store } from 'redux';\nimport rootReducer, { RootState } from './reducers/combinedReducers';\n\n\nexport function configureStore(initialState?: RootState): Store {\n const composeEnhancers =\n typeof window === 'object' &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n // trace: true,\n name: 'vto-core'\n }) : compose;\n\n const enhancer = composeEnhancers();\n return createStore(rootReducer, initialState, enhancer);\n}\n","import { OpacityError } from '../constants/errors';\nimport { TransitionColorHelper } from '../helpers/TransitionColorHelper';\n\n\nconst setTransitionOpacity = (opacity = 0): void => {\n \n if (opacity !== undefined) {\n if (typeof opacity !== 'number' || opacity < 0 || opacity > 1) {\n const error = new OpacityError('opacity must be a number between 0 and 1');\n throw error;\n }\n TransitionColorHelper.setCurrentLensOpacity(opacity);\n\n } else {\n const error = new OpacityError('opacity cannot be set when mirror is not initialized');\n throw error;\n }\n};\n\nexport {\n setTransitionOpacity\n};\n","import { TransitionColorHelper } from '../helpers/TransitionColorHelper';\n\nconst setTransitionOverrideColor = (transitionColor: TransitionLens): void => {\n TransitionColorHelper.setTransitionOverrideColor(transitionColor);\n};\n\nexport {\n setTransitionOverrideColor\n};\n","import { TransitionColorHelper } from '../helpers/TransitionColorHelper';\n\n\nconst setTransitionLensName = (colorName: string): void => {\n TransitionColorHelper.setCurrentTransitionLens(colorName);\n};\n\nexport {\n setTransitionLensName\n};\n","\nimport { Catalog, GlassesEnvironment } from '@luxottica/vm-glasses';\n\nconst downloadTransitionColorCatalogue = (env: GlassesEnvironment): Promise> => {\n return Catalog.downloadTransitionLenses({env}).then((colors)=>{\n return Object.keys(colors);\n });\n};\n\nexport {\n downloadTransitionColorCatalogue\n};\n","import { Vector3 } from 'three';\n\nexport const MAX_VIEWS = 15;\nexport const MAX_DEGREE_ROTATION = 90;\nexport const fix = 2;\n\nexport interface GlassesOpts {\n fadeScale?: number;\n glassesOffset?: number;\n glassesScale?: number;\n earDistance?: number;\n earZ?: number; // from external\n pose?: number;\n position?: Vector3;\n enableDebug?: boolean;\n enableFade?: boolean;\n}\n\nexport const glassesOptsDefault: GlassesOpts = {\n glassesOffset: 130,\n glassesScale: 1,\n earDistance: 100,\n earZ: 100,\n pose: 7,\n fadeScale: 1,\n enableDebug: true,\n enableFade: false\n};\n","import {\n BlendingDstFactor,\n Color,\n CubeTexture,\n Material,\n Matrix3,\n MeshStandardMaterialParameters,\n RawShaderMaterial,\n ShaderMaterialParameters,\n Texture,\n Vector3\n} from 'three';\nimport { Vector2 } from 'three/src/math/Vector2';\nimport { Vector4 } from 'three/src/math/Vector4';\nimport { Matrix4 } from 'three/src/math/Matrix4';\n\n// parameters that encapsulate shader material\n// to override raw shader material parameters\nexport interface IVMRendererCoreMaterialParameters {\n // injected in super constructor\n shaderMaterialParameters?: ShaderMaterialParameters;\n\n /**\n * Controls the define inside the shaders that allows to\n * use the standard threeJS mvp uniform\n * (uniform mat4 projectionMatrix, uniform mat4 modelViewMatrix)\n *\n * or the VM styled mvp uniform (uniform mat4 mvp)\n *\n * @default false\n */\n useStandardMVPUniform?: boolean;\n\n /**\n * Alternative model view projection matrix passed as external uniform to shader\n */\n mvp?: Matrix4;\n}\n\nexport interface IVMMultipassMaterial extends Material {\n setPass(opts: VTOPassOpts): void;\n}\n\nexport interface IVMRendererCoreMaterial extends RawShaderMaterial {\n setParameters(parameters?: IVMRendererCoreMaterialParameters): void;\n\n getParameters(): IVMRendererCoreMaterialParameters;\n}\n\nexport interface IMultiMVPSupport {\n useStandardMVP(useStandard: boolean);\n}\n\nexport interface IHeadShadowMaterialParameters extends IVMRendererCoreMaterialParameters {\n colorMap?: Texture | Color; // background texture screen space\n shadowMap?: Texture; // glasses-specific shadow texture\n isVM?: boolean; // use to set value SCREENSPACE_UV_X_FLIP define\n showFitArea?: boolean;\n disableShadowCoordFlip?: boolean; // disable y shadow coord flip\n useColorMap?: boolean; // flag to enable/disable color map\n cullYmin?: number;\n cullYmax?: number;\n debugZMultiplier?: number;\n debugColor?: Vector4;\n toneMapped?: boolean;\n texOffset?: Vector2; // screen space uv offset for bg texture\n shadowOffset?: Vector2; // uv offset to fit shadow glasses\n headScale?: number; // uv scale\n // positioning on shadow when glasses are moved\n // values used also for lightening shadow intensity\n noseOffset?: number; // vertical adjustment of shadow using nose offset\n earOffset?: number; // vertical adjustment of shadow using ear offset\n scaleMultiplier?: number;\n discardOverZPos?: boolean;\n zPosThreshold?: number;\n}\n\n// enum used to switch between add and mult pass\nexport enum TypePass {\n MULT,\n ADD,\n MIRROR\n}\n\n// interface to config material for each render pass\nexport interface VTOPassOpts {\n type?: TypePass;\n stencil?: number;\n}\n\nexport interface VTOPassBlendingConfig {\n srcColor: BlendingDstFactor;\n dstColor: BlendingDstFactor;\n}\n\nexport interface VTOFadeMaterialParameters extends VTOBasicMaterialParameters {\n blendColorTex?: Texture;\n blendf?: number;\n btype?: number;\n}\n\nexport interface VTOBasicMaterialParameters extends IVMRendererCoreMaterialParameters {\n colorTex?: Texture;\n multTex?: Texture;\n transparency?: number;\n}\n\nexport enum VertColorOpts {\n COLORS,\n UVS,\n NORMALS\n}\n\nexport interface IAttributesDebugParameters extends IVMRendererCoreMaterialParameters {\n renderOpts: VertColorOpts;\n}\n\nexport interface IHeatmapParameters extends IVMRendererCoreMaterialParameters {\n cutoffMin?: number;\n cutoffMax?: number;\n worldToRestMatrix?: Matrix4;\n}\n\nexport interface IB3DGlassesMaterialParameters extends IVMRendererCoreMaterialParameters {\n flare?: number;\n taper?: number;\n scale?: number;\n sideInFront?: number;\n fadePositionZ?: number;\n colorMap?: Texture;\n multMap?: Texture;\n blendMode?: number;\n enableFade?: boolean;\n}\n\nexport interface ITransitionMultipassMaterialParameters extends IB3DGlassesMaterialParameters {\n lensMap?: Texture;\n transmissionCorrectionFactor?: number;\n lensTransmission?: Color;\n useLensMap?: boolean;\n hideLenses?: boolean;\n envMap?: CubeTexture;\n}\n\n// parameters for Mirror Multipass material\nexport interface IMirrorMultipassMaterialParameters extends ITransitionMultipassMaterialParameters {\n world?: Matrix4;\n envMapIntensity?: number;\n lensCoatingSpecularity?: number;\n reflectionVecMat?: Matrix3;\n sphereOrigin?: Vector3;\n lensCoatingSpecularColor?: Color;\n}\n\nexport interface IGradientMultipassMaterialParameters extends IB3DGlassesMaterialParameters {\n lensMap?: Texture;\n lensTransmission?: Color[];\n useLensMap?: boolean;\n envMap?: CubeTexture;\n world?: Matrix4;\n envMapIntensity?: number;\n lensCoatingSpecularity?: number[];\n reflectionVecMat?: Matrix3;\n sphereOrigin?: Vector3;\n lensCoatingSpecularColor?: Color[];\n heightOnLensInterpolationFactor?: number[];\n lensMinY?: number;\n lensMaxY?: number;\n}\n\nexport interface ILensesMirrorMultipassMaterialParameters {\n envMapIntensity?: number;\n lensCoatingSpecularity?: number;\n reflectionVecMat?: Matrix3;\n lensCoatingSpecularColor?: Color;\n transmissionCorrectionFactor?: number;\n lensTransmission?: Color;\n envMap?: CubeTexture | Texture;\n blendMode?: number;\n shaderMaterialParameters?: ShaderMaterialParameters;\n}\n\nexport interface ILensesGradientMultipassMaterialParameters {\n envMapIntensity?: number;\n lensCoatingSpecularity?: number[];\n reflectionVecMat?: Matrix3;\n lensCoatingSpecularColor?: Color[];\n lensTransmission?: Color[];\n heightOnLensInterpolationFactor?: number[];\n envMap?: CubeTexture | Texture;\n blendMode?: number;\n shaderMaterialParameters?: ShaderMaterialParameters;\n lensMinY?: number;\n lensMaxY?: number;\n}\n\nexport interface ITaperUniforms {\n flare?: number;\n taper?: number;\n scale?: number;\n sideInFront?: number;\n fadePositionZ?: number;\n unitScaleFactor?: number;\n worldToRestMatrix?: Matrix4;\n invWorldToRestMatrix?: Matrix4;\n}\n\nexport interface IFadeUniforms {\n enableFade?: boolean;\n fadePositionZ?: number;\n unitScaleFactor?: number;\n worldToRestMatrix?: Matrix4;\n ditheringDistribution?: number;\n}\n\nexport interface ITaperMeshStandardMaterialParameters {\n meshStandardParameters: MeshStandardMaterialParameters;\n glassesUniforms: ITaperUniforms;\n}\n\nexport interface ILensesIridescentMaterialParameters {\n vertexShader?: string | undefined;\n fragmentShader?: string | undefined;\n envMap?: CubeTexture | Texture;\n map?: CubeTexture;\n color?: Vector3;\n opacity?: number;\n mapY?: number;\n mapX?: number;\n mapZ?: number;\n sensitivity?: number;\n intensity?: number;\n}\n","import { AddEquation, RawShaderMaterial } from 'three';\nimport sampleVert from '../Shaders/debug/vertDebug.vert.glsl';\nimport sampleFrag from '../Shaders/debug/vertDebug.frag.glsl';\nimport { IAttributesDebugParameters, IVMRendererCoreMaterial, VertColorOpts } from './MaterialInterfaces';\n\nconst vertDefaultColorParameters : IAttributesDebugParameters = {\n renderOpts : VertColorOpts.COLORS,\n useStandardMVPUniform : true,\n shaderMaterialParameters : {\n vertexShader : sampleVert,\n fragmentShader : sampleFrag,\n defines: {\n RENDER_NORMALS : 0,\n RENDER_UVS : 0,\n RENDER_COLORS : 1,\n THREEJS_MATRICES: 0\n }\n }\n};\n\nexport class AttributesDebugMaterial extends RawShaderMaterial implements IVMRendererCoreMaterial{\n\n protected parameters : IAttributesDebugParameters;\n\n constructor(parameters?: IAttributesDebugParameters) {\n super(\n {...vertDefaultColorParameters.shaderMaterialParameters,\n ...(parameters? parameters.shaderMaterialParameters : {})\n });\n\n this.parameters = {...vertDefaultColorParameters,...parameters};\n this.transparent = false;\n this.blendEquation = AddEquation;\n this.setParameters(parameters);\n }\n\n getParameters(): IAttributesDebugParameters{\n return this.parameters;\n }\n\n setParameters(parameters?: IAttributesDebugParameters): void {\n this.parameters ={...this.parameters,...parameters};\n switch (this.parameters.renderOpts){\n case VertColorOpts.NORMALS:\n this.defines.RENDER_NORMALS = 1;\n this.defines.RENDER_UVS = 0;\n this.defines.RENDER_COLORS = 0;\n break;\n case VertColorOpts.UVS:\n this.defines.RENDER_NORMALS = 0;\n this.defines.RENDER_UVS = 1;\n this.defines.RENDER_COLORS = 0;\n break;\n case VertColorOpts.COLORS:\n this.defines.RENDER_COLORS = 1;\n this.defines.RENDER_NORMALS = 0;\n this.defines.RENDER_UVS = 0;\n break;\n }\n\n this.defines.THREEJS_MATRICES = this.parameters.useStandardMVPUniform ? 1 : 0;\n }\n\n}\n","import { BufferAttribute, Float32BufferAttribute } from 'three/src/core/BufferAttribute';\nimport { BufferGeometry } from 'three/src/core/BufferGeometry';\nimport { Matrix4 } from 'three/src/math/Matrix4';\nimport { Vector3 } from 'three/src/math/Vector3';\n\nimport { Binocular3DObject } from '../AssetManager/b3d/b3dbundle';\nimport { B3DHelper } from '../Helpers/B3DHelper';\n\nexport enum ColorBufferType {\n ORDER = 0,\n BSP = 1,\n LEVEL = 2\n}\n\nexport const bufferNames: Map = new Map([\n ['Sorting', ColorBufferType.ORDER],\n ['Bsp', ColorBufferType.BSP],\n ['Level', ColorBufferType.LEVEL]\n]);\n\n/**\n * Maximum level of three for each pose\n */\nexport interface MaxLevelTreePerPose {\n maxF: number[];\n maxB: number[];\n maxC: number[];\n}\n\nexport interface GlassesBspDebugOpts {\n useAverage?: boolean;\n bufferType?: ColorBufferType;\n vertexOrder?: boolean;\n trisOrder?: boolean;\n\n hasCoplanar?: boolean;\n hasFront?: boolean;\n hasBack?: boolean;\n\n levelC?: boolean;\n levelF?: boolean;\n levelB?: boolean;\n levelCThr?: number;\n levelFThr?: number;\n levelBThr?: number;\n}\n\nexport const defaultDebugOpts: GlassesBspDebugOpts = {\n bufferType: ColorBufferType.BSP,\n vertexOrder: false,\n trisOrder: true,\n hasFront: false,\n hasCoplanar: false,\n hasBack: false,\n useAverage: false,\n\n levelC: false,\n levelF: false,\n levelB: false,\n levelBThr: 0,\n levelFThr: 0,\n levelCThr: 0\n};\n\nexport class TriNode {\n public index: number;\n public children: number[];\n}\n\nexport class GlassesB3DGeometry {\n protected debugOpts: GlassesBspDebugOpts = defaultDebugOpts;\n // protobuffer object from b3d\n protected protobufferObject: Binocular3DObject.B3DObject;\n\n // statistics\n protected indexCount: number;\n protected vertexCount: number;\n protected trisCount: number;\n\n // VBO\n protected vertices: Float32Array;\n // IBO\n protected indices: Uint16Array;\n\n protected projectedVBOData: Float32Array;\n protected bufferIndices: Uint16Array;\n\n protected triangleIndexList: number[];\n protected sortedTriangles: Uint16Array;\n protected bspTree: any;\n protected flare: number;\n protected bspBuilt: boolean;\n protected vboData: BufferGeometry;\n\n // structure for debugging purpose\n protected debugOrderColorBuffer: Float32Array;\n protected debugBspColorBuffer: Float32Array;\n protected debugLevelColorBuffer: Float32Array;\n protected maxLevelC: number[];\n protected maxLevelF: number[];\n protected maxLevelB: number[];\n protected vertexOccur: Uint16Array;\n protected mvp: Matrix4[];\n protected enableDebug: boolean;\n\n constructor(b3dData: Uint8Array, enableDebug = true, millimetersToMetersScalingFactor = false) {\n // deserializing b3dobj\n this.enableDebug = enableDebug;\n const b3dObj: Binocular3DObject.B3DObject = B3DHelper.load(b3dData);\n this.protobufferObject = b3dObj;\n\n const geometryMultiplier = millimetersToMetersScalingFactor ? 0.001 : 1;\n\n this.indices = B3DHelper.getIndicesFromB3D(b3dObj);\n const uvs = B3DHelper.getUVSFromB3D(b3dObj);\n this.vertices = B3DHelper.getVerticesFromB3D(b3dObj);\n\n this.vertexCount = b3dObj.vlist.length;\n this.trisCount = b3dObj.tlist.length;\n this.indexCount = this.indices.length;\n\n const geometry = new BufferGeometry();\n geometry.setIndex(new BufferAttribute(this.indices, 1));\n geometry.setAttribute('position', new Float32BufferAttribute(this.vertices, 3));\n geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n geometry.scale(geometryMultiplier, geometryMultiplier, geometryMultiplier);\n\n this.vboData = geometry;\n\n // expand the BSP tree\n this.bspTree = [];\n this.triangleIndexList = [];\n this.flare = this.protobufferObject.flare;\n this.bufferIndices = new Uint16Array(this.indexCount);\n this.projectedVBOData = new Float32Array(b3dObj.vlist.length * 3);\n\n this.initDebugStructures();\n this.buildBSPTree(0);\n }\n\n private initDebugStructures() {\n if (!this.enableDebug) return;\n this.maxLevelF = [];\n this.maxLevelB = [];\n this.maxLevelC = [];\n }\n\n public getProtobufferObject(): Binocular3DObject.B3DObject {\n return this.protobufferObject;\n }\n\n public isBSPBuilt(): boolean {\n return this.bspBuilt;\n }\n\n public sortTrianglesForAllFrames(mvps: Matrix4[]): void {\n this.sortedTriangles = new Uint16Array(this.indexCount * mvps.length);\n let offset = 0;\n for (let frame = 0; frame < mvps.length; frame++) {\n this.projectVBODataWithMVP(mvps[frame]);\n offset = this.generateInnerSortedIndexListNonRecursive(0, offset, frame);\n }\n this.bspBuilt = true;\n }\n\n private projectVBODataWithMVP(mvp: Matrix4) {\n for (let i = 0; i < this.protobufferObject.vlist.length; i++) {\n const vert: Vector3 = new Vector3(this.vertices[i * 3], this.vertices[i * 3 + 1], this.vertices[i * 3 + 2]);\n vert.applyMatrix4(mvp);\n this.projectedVBOData[i * 3 + 0] = vert.x;\n this.projectedVBOData[i * 3 + 1] = vert.y;\n this.projectedVBOData[i * 3 + 2] = vert.z;\n }\n }\n\n /**\n *\n * @returns the max level for each branch for each pose.\n */\n public getMaxs(): MaxLevelTreePerPose {\n return {\n maxF: this.maxLevelF,\n maxB: this.maxLevelB,\n maxC: this.maxLevelC\n };\n }\n\n private buildBSPTree(root: number) {\n let next = root + 1;\n const bsp = this.bspTree;\n bsp[root] = {};\n\n if (this.enableDebug) {\n bsp[root].levelC = new Array(15);\n bsp[root].levelB = new Array(15);\n bsp[root].levelF = new Array(15);\n }\n\n const b3ddata = this.protobufferObject;\n\n if (b3ddata.tlist[root].hasFront) {\n bsp[root].front = next;\n next = this.buildBSPTree(next);\n } else {\n bsp[root].front = -1;\n }\n\n if (b3ddata.tlist[root].hasCoplanar) {\n bsp[root].coplanar = next;\n next = this.buildBSPTree(next);\n } else {\n bsp[root].coplanar = -1;\n }\n\n if (b3ddata.tlist[root].hasBack) {\n bsp[root].back = next;\n next = this.buildBSPTree(next);\n } else {\n bsp[root].back = -1;\n }\n\n return next;\n }\n\n /**\n * calculate cross product of projected 3D vectors ((v2 - v1) x (v3 - v1)) using MVP matrix\n * using determinant of the 2D matrix containing the two above vectors.\n * \n * negative determinant means that the normal is facing away from the camera\n * \n * NOTE: the winding order used in this formula is counterclockwise as positive part of the normal\n * \n * @param v1 \n * @param v2 \n * @param v3 \n * @returns triangle is front facing using winding order CCW\n */\n private isFrontFacing(v1: number[], v2: number[], v3: number[]): boolean {\n const x12 = v2[0] - v1[0];\n const y12 = v2[1] - v1[1];\n\n const x13 = v3[0] - v1[0];\n const y13 = v3[1] - v1[1];\n\n return x12 * y13 - y12 * x13 < 0;\n }\n\n /**\n * it builds triangle vertices position using index of the projected triangle using MVP matrix,\n * then it calculates if the triangle is front facing or backfacing\n * \n * @param index \n * @returns \n */\n private isTriangleFrontFacing(index: number): boolean {\n const v0Index = this.indices[index * 3 + 0];\n const v1Index = this.indices[index * 3 + 1];\n const v2Index = this.indices[index * 3 + 2];\n\n const v0 = [this.projectedVBOData[v0Index * 3], this.projectedVBOData[v0Index * 3 + 1], this.projectedVBOData[v0Index * 3 + 2]];\n const v1 = [this.projectedVBOData[v1Index * 3 + 0], this.projectedVBOData[v1Index * 3 + 1], this.projectedVBOData[v2Index * 3 + 2]];\n const v2 = [this.projectedVBOData[v2Index * 3 + 0], this.projectedVBOData[v2Index * 3 + 1], this.projectedVBOData[v2Index * 3 + 2]];\n\n return this.isFrontFacing(v0, v1, v2);\n }\n\n /**\n * set indices buffer for vbo data\n * @param sorted \n */\n public setBufferIndices(sorted: Uint16Array): void {\n this.vboData.setIndex(new BufferAttribute(sorted, 1));\n }\n\n private updateFrontLevels(index, pose) {\n const parentT = this.bspTree[index];\n const frontT = this.bspTree[this.bspTree[index].front];\n frontT.levelF[pose] = parentT.levelF[pose] !== undefined ? parentT.levelF[pose] + 1 : -1;\n this.maxLevelF[pose] = Math.max(this.maxLevelF[pose], frontT.levelF[pose]);\n }\n\n private updateCoplanarLevels(index, pose) {\n const parentT = this.bspTree[index];\n const coplanarT = this.bspTree[this.bspTree[index].coplanar];\n coplanarT.levelC[pose] = parentT.levelC[pose] !== undefined ? parentT.levelC[pose] + 1 : -1;\n this.maxLevelC[pose] = Math.max(this.maxLevelC[pose], coplanarT.levelC[pose]);\n }\n\n private updateBackLevels(index, pose) {\n const parentT = this.bspTree[index];\n const backT = this.bspTree[this.bspTree[index].back];\n backT.levelB[pose] = parentT.levelB[pose] !== undefined ? parentT.levelB[pose] + 1 : -1;\n this.maxLevelB[pose] = Math.max(this.maxLevelB[pose], backT.levelB[pose]);\n }\n\n // this is the opposite from the recursive, since we're using it as a stack\n private generateChildrenForIndex(index: number, pose: number): number[] {\n const children = new Array();\n const parentT = this.bspTree[index];\n const hasFront = this.bspTree[index].front >= 0;\n const hasCoplanar = this.bspTree[index].coplanar >= 0;\n const hasBack = this.bspTree[index].back >= 0;\n\n if (this.isTriangleFrontFacing(index)) {\n if (hasFront) {\n children.push(this.bspTree[index].front);\n if (this.enableDebug) this.updateFrontLevels(index, pose);\n }\n if (hasCoplanar) {\n children.push(this.bspTree[index].coplanar);\n if (this.enableDebug) this.updateCoplanarLevels(index, pose);\n }\n children.push(-1);\n if (hasBack) {\n children.push(this.bspTree[index].back);\n if (this.enableDebug) this.updateBackLevels(index, pose);\n }\n // it's backfacing\n } else {\n if (hasBack) {\n children.push(this.bspTree[index].back);\n if (this.enableDebug) this.updateBackLevels(index, pose);\n }\n\n if (hasCoplanar) {\n children.push(this.bspTree[index].coplanar);\n if (this.enableDebug) this.updateCoplanarLevels(index, pose);\n }\n children.push(-1);\n\n if (hasFront) {\n children.push(this.bspTree[index].front);\n if (this.enableDebug) this.updateFrontLevels(index, pose);\n }\n }\n return children;\n }\n\n private generateInnerSortedIndexListNonRecursive(root: number, offset: number, pose: number): number {\n const nodeStack = new Array();\n if (this.enableDebug) {\n this.bspTree[root].levelC[pose] = 0;\n this.bspTree[root].levelB[pose] = 0;\n this.bspTree[root].levelF[pose] = 0;\n // add the root to the stack, then loop\n }\n const rootChildren = this.generateChildrenForIndex(root, pose);\n this.triangleIndexList.push(root);\n nodeStack.push({ index: root, children: rootChildren });\n\n while (nodeStack.length > 0) {\n if (nodeStack[nodeStack.length - 1].children.length > 0) {\n const nextIdx = nodeStack[nodeStack.length - 1].children.pop();\n if (nextIdx === -1) {\n const current = nodeStack[nodeStack.length - 1].index;\n\n // pushing triangle in the list\n this.triangleIndexList.push(current);\n this.sortedTriangles[offset * 3] = this.indices[current * 3];\n this.sortedTriangles[offset * 3 + 1] = this.indices[current * 3 + 1];\n this.sortedTriangles[offset * 3 + 2] = this.indices[current * 3 + 2];\n offset++;\n } else {\n const children = this.generateChildrenForIndex(nextIdx, pose);\n if (children.length === 1) {\n if (children[0] !== -1) {\n throw new Error('Only one child and not itself!');\n }\n\n // pushing triangle in the list\n this.triangleIndexList.push(nextIdx);\n this.sortedTriangles[offset * 3] = this.indices[nextIdx * 3];\n this.sortedTriangles[offset * 3 + 1] = this.indices[nextIdx * 3 + 1];\n this.sortedTriangles[offset * 3 + 2] = this.indices[nextIdx * 3 + 2];\n offset++;\n } else {\n nodeStack.push({ index: nextIdx, children });\n }\n }\n } else {\n nodeStack.pop();\n }\n }\n return offset;\n }\n\n /**\n * Update all color buffers with color info to assign per vertex\n *\n * @param offset (start position in sorted list)\n * @param indexPos (buffer position)\n * @param vertexIndex (vertex index)\n * @param pose (current selected pose)\n * @private\n */\n private updateBufferColorPerVertex(offset: number, indexPos: number, vertexIndex: number, pose: number) {\n const tris = this.trisCount;\n // starting offset index for pose x\n const indices = this.indexCount;\n\n // first index of the current triangle\n const lIndex = Math.floor((offset + indexPos) / 3);\n const tIndex = this.triangleIndexList[lIndex];\n const currentTriangle = this.protobufferObject.tlist[tIndex];\n\n /**\n * Preparing color order buffer. which it store all information about IBO order for specific view\n **/\n\n this.debugOrderColorBuffer[vertexIndex * 4] = this.debugOpts.vertexOrder ? indexPos / indices : 0.0;\n this.debugOrderColorBuffer[vertexIndex * 4 + 1] = this.debugOpts.trisOrder ? tIndex / tris : 0.0;\n this.debugOrderColorBuffer[vertexIndex * 4 + 2] = 0.0;\n this.debugOrderColorBuffer[vertexIndex * 4 + 3] = 1.0;\n\n /**\n * Preparing bsp color buffer which can be used in two different ways :\n * - 1) vertex color is set to 1 if at least one triangles has a specific properties true\n * - 2) vertex color is set by averaging results of all triangles where vertex belongs to\n **/\n\n let hasFront: number = this.debugBspColorBuffer[vertexIndex * 4];\n let hasBack: number = this.debugBspColorBuffer[vertexIndex * 4 + 1];\n let hasCoplanar: number = this.debugBspColorBuffer[vertexIndex * 4 + 2];\n\n if (this.debugOpts.useAverage) {\n //update values based on current triangle\n hasFront = this.debugOpts.hasFront ? (currentTriangle.hasFront ? 1.0 : 0.0) : 0.0;\n hasBack = this.debugOpts.hasBack ? (currentTriangle.hasBack ? 1.0 : 0.0) : 0.0;\n hasCoplanar = this.debugOpts.hasCoplanar ? (currentTriangle.hasCoplanar ? 1.0 : 0.0) : 0.0;\n\n //calculate the previous amount stored in color buffer\n let prevAmountFront = this.debugBspColorBuffer[vertexIndex * 4] * this.vertexOccur[vertexIndex];\n let prevAmountBack = this.debugBspColorBuffer[vertexIndex * 4 + 1] * this.vertexOccur[vertexIndex];\n let prevAmountCoplanar = this.debugBspColorBuffer[vertexIndex * 4 + 2] * this.vertexOccur[vertexIndex];\n\n // update amount with new values\n prevAmountFront += this.vertexOccur[vertexIndex] == 0 && this.debugOpts.hasFront ? 1 : 0;\n prevAmountBack += this.vertexOccur[vertexIndex] == 0 && this.debugOpts.hasBack ? 1 : 0;\n prevAmountCoplanar += this.vertexOccur[vertexIndex] == 0 && this.debugOpts.hasCoplanar ? 1 : 0;\n\n this.vertexOccur[vertexIndex]++;\n\n //compute final average\n const avgFront = (prevAmountFront + hasFront) / this.vertexOccur[vertexIndex];\n const avgBack = (prevAmountBack + hasBack) / this.vertexOccur[vertexIndex];\n const avgCoplanar = (prevAmountCoplanar + hasCoplanar) / this.vertexOccur[vertexIndex];\n\n // store results\n this.debugBspColorBuffer[vertexIndex * 4] = avgFront;\n this.debugBspColorBuffer[vertexIndex * 4 + 1] = avgBack;\n this.debugBspColorBuffer[vertexIndex * 4 + 2] = avgCoplanar;\n } else {\n // if current vertex belongs to triangles with hasFront= true then update r channel\n if (hasFront == 0) {\n hasFront = this.debugOpts.hasFront ? (currentTriangle.hasFront ? 1.0 : 0.0) : 0.0;\n }\n // if current vertex belongs to triangles with hasFront= true then update g channel\n if (hasBack == 0) {\n hasBack = this.debugOpts.hasBack ? (currentTriangle.hasBack ? 1.0 : 0.0) : 0.0;\n }\n // if current vertex belongs to triangles with hasFront= true then update b channel\n if (hasCoplanar == 0) {\n hasCoplanar = this.debugOpts.hasCoplanar ? (currentTriangle.hasCoplanar ? 1.0 : 0.0) : 0.0;\n }\n this.debugBspColorBuffer[vertexIndex * 4] = hasFront;\n this.debugBspColorBuffer[vertexIndex * 4 + 1] = hasBack;\n this.debugBspColorBuffer[vertexIndex * 4 + 2] = hasCoplanar;\n }\n\n this.debugBspColorBuffer[vertexIndex * 4 + 3] = 1.0;\n\n // fill color buffer for single vertices based on view tree generated by sorting algorithm.\n // If current triangles appear in a level greater than threshold than vertex color is set to 1\n\n this.debugLevelColorBuffer[vertexIndex * 4] = this.debugOpts.levelC\n ? this.bspTree[tIndex].levelC[pose] >= this.debugOpts.levelCThr\n ? 1.0\n : 0.0\n : 0.0;\n this.debugLevelColorBuffer[vertexIndex * 4 + 1] = this.debugOpts.levelF\n ? this.bspTree[tIndex].levelF[pose] >= this.debugOpts.levelFThr\n ? 1.0\n : 0.0\n : 0.0;\n this.debugLevelColorBuffer[vertexIndex * 4 + 2] = this.debugOpts.levelB\n ? this.bspTree[tIndex].levelB[pose] >= this.debugOpts.levelBThr\n ? 1.0\n : 0.0\n : 0.0;\n this.debugLevelColorBuffer[vertexIndex * 4 + 3] = 1.0;\n }\n\n private updateColorBuffers(pose: number) {\n const indices = this.indexCount;\n const offset = this.getStartIndex(pose);\n const bufIndices = this.bufferIndices;\n this.debugOrderColorBuffer = new Float32Array(this.vertexCount * 4);\n this.debugBspColorBuffer = new Float32Array(this.vertexCount * 4);\n this.debugLevelColorBuffer = new Float32Array(this.vertexCount * 4);\n this.vertexOccur = new Uint16Array(this.vertexCount);\n\n for (let i = 0; i < indices; i++) {\n // copy the current pose IBO for each index\n this.updateBufferColorPerVertex(offset, i, bufIndices[i], pose);\n }\n\n switch (this.debugOpts.bufferType) {\n case ColorBufferType.ORDER:\n const bufferCol = new Float32BufferAttribute(this.debugOrderColorBuffer, 4);\n bufferCol.copyArray(this.debugOrderColorBuffer);\n this.vboData.setAttribute('color', bufferCol);\n break;\n case ColorBufferType.BSP:\n this.vboData.setAttribute('color', new Float32BufferAttribute(this.debugBspColorBuffer, 4));\n break;\n case ColorBufferType.LEVEL:\n this.vboData.setAttribute('color', new Float32BufferAttribute(this.debugLevelColorBuffer, 4));\n break;\n }\n }\n\n public updateIBODataFromPose(pose: number, debug?: GlassesBspDebugOpts) {\n this.debugOpts = { ...this.debugOpts, ...debug };\n\n // starting offset index for pose x\n const indices = this.indexCount;\n const offset = this.getStartIndex(pose);\n // uint16: length indices -> single \"slice\" of indices for current position\n const bufIndices = this.bufferIndices;\n // uint16: length: indices*15\n const sortedTris = this.sortedTriangles;\n\n for (let i = 0; i < indices; i++) {\n // copy the current pose IBO for each index\n bufIndices[i] = sortedTris[offset + i];\n }\n\n this.vboData.setIndex(new BufferAttribute(bufIndices, 1));\n if (!this.enableDebug) return;\n this.updateColorBuffers(pose);\n }\n\n private getStartIndex(frameno: number) {\n return this.indexCount * frameno;\n }\n\n /**\n * @deprecated\n * @returns glasses geometry\n */\n public getVBOData(): BufferGeometry {\n return this.vboData;\n }\n\n public getVertices(): Float32Array {\n return this.vertices;\n }\n\n /**\n *\n * @returns glasses geometry\n */\n public getBufferGeometry(): BufferGeometry {\n return this.vboData;\n }\n\n public getFlare(): number {\n return this.flare;\n }\n\n public getSortedTrianglesList(): Uint16Array {\n return this.sortedTriangles;\n }\n\n public getTriangleIndexList(): number[] {\n return this.triangleIndexList;\n }\n}\n","import {\n AddEquation,\n Color,\n CustomBlending,\n DoubleSide,\n EqualStencilFunc,\n IncrementStencilOp,\n LessEqualDepth,\n OneFactor,\n RawShaderMaterial,\n SrcColorFactor,\n Texture,\n Uniform,\n ZeroFactor\n} from 'three';\n\nimport { Matrix4 } from 'three/src/math/Matrix4';\n\nimport {\n IMultiMVPSupport,\n ITransitionMultipassMaterialParameters,\n IVMMultipassMaterial,\n IVMRendererCoreMaterial,\n TypePass,\n VTOPassOpts\n} from './MaterialInterfaces';\n\nimport glassesTransitionVert from '../Shaders/glasses/glasses-b3d-transition.vert.glsl';\nimport glassesTransitionFrag from '../Shaders/glasses/glasses-b3d-transition.frag.glsl';\n\nexport interface ITransitionMaterialDefines {\n THREEJS_MATRICES: number;\n LENS_MASK: number;\n HIDE_LENSES: number;\n HIDE_FRAME: number;\n}\n\n/**\n * Default Parameters\n */\nexport const transitionGlassesMaterialDefaultOpts: ITransitionMultipassMaterialParameters = {\n mvp: new Matrix4().identity(),\n flare: 1,\n taper: 0,\n scale: 1,\n sideInFront: 0,\n fadePositionZ: 0,\n useStandardMVPUniform: false,\n useLensMap: true,\n hideLenses: false,\n colorMap: new Texture(),\n multMap: new Texture(),\n lensMap: new Texture(),\n lensTransmission: new Color(1, 1, 1),\n transmissionCorrectionFactor: 0,\n blendMode: 0,\n enableFade: false,\n shaderMaterialParameters: {\n vertexShader: glassesTransitionVert,\n fragmentShader: glassesTransitionFrag,\n defines: {\n THREEJS_MATRICES: 0,\n LENS_MASK: 1,\n HIDE_LENSES: 0,\n HIDE_FRAME: 0\n }\n }\n};\n\n/**\n * Material used in the VTO/VM for B3D Glasses with default or transition (but not mirror) lenses\n */\nexport class GlassesB3DTransitionMaterial\n extends RawShaderMaterial\n implements IVMRendererCoreMaterial, IMultiMVPSupport, IVMMultipassMaterial\n{\n /**\n * Parameters for material, mainly uniforms and define options\n */\n private parameters: ITransitionMultipassMaterialParameters = transitionGlassesMaterialDefaultOpts;\n public srpType = 'GLASSES_MULTIPASS_MATERIAL';\n\n /**\n * General option for\n */\n private opts: VTOPassOpts = {\n type: TypePass.MULT,\n stencil: 0\n };\n\n constructor(opts?: VTOPassOpts, parameters?: ITransitionMultipassMaterialParameters) {\n // merge default options with passed parameters\n super({\n ...transitionGlassesMaterialDefaultOpts.shaderMaterialParameters,\n ...(parameters ? parameters.shaderMaterialParameters : {})\n });\n\n // init uniforms\n this.initParameters();\n\n // configure material (fixed pipeline funcs)\n this.configureMaterials(opts);\n\n // set default paramteres\n this.setParameters(parameters);\n }\n\n public disposeTexture(): void {\n this.uniforms.multMap.value.dispose();\n this.uniforms.colorMap.value.dispose();\n }\n\n public initParameters(): void {\n for (const key in transitionGlassesMaterialDefaultOpts) {\n this.uniforms[key] = new Uniform(transitionGlassesMaterialDefaultOpts[key]);\n }\n }\n\n public setParameters(parameters?: ITransitionMultipassMaterialParameters): void {\n this.parameters = { ...this.parameters, ...parameters };\n\n this.uniforms.multMap.value = this.parameters.multMap;\n this.uniforms.colorMap.value = this.parameters.colorMap;\n this.uniforms.lensMap.value = this.parameters.lensMap;\n this.uniforms.lensTransmission.value = this.parameters.lensTransmission;\n this.uniforms.transmissionCorrectionFactor.value = this.parameters.transmissionCorrectionFactor;\n this.uniforms.mvp.value = this.parameters.mvp;\n this.uniforms.flare.value = this.parameters.flare;\n this.uniforms.taper.value = this.parameters.taper;\n this.uniforms.scale.value = this.parameters.scale;\n this.uniforms.sideInFront.value = this.parameters.sideInFront;\n this.uniforms.fadePositionZ.value = this.parameters.fadePositionZ;\n this.uniforms.enableFade.value = this.parameters.enableFade ? 1 : 0;\n this.uniforms.blendMode.value = this.parameters.blendMode;\n }\n\n /**\n * Allow to switch between multiplication pass and the additive pass mode\n * The mode set both fixed pipeline parameters (blending function) and a uniform to trigger the correct mode inside the shader\n * @param opts\n */\n public setPass(opts: VTOPassOpts): void {\n this.opts = { ...this.opts, ...opts };\n\n this.stencilRef = this.opts.stencil;\n\n switch (this.opts.type) {\n case TypePass.MULT:\n this.blendSrc = ZeroFactor;\n this.blendDst = SrcColorFactor;\n this.blendSrcAlpha = OneFactor;\n this.blendDstAlpha = ZeroFactor;\n break;\n case TypePass.ADD:\n this.blendSrc = OneFactor;\n this.blendDst = OneFactor;\n this.blendSrcAlpha = OneFactor;\n this.blendDstAlpha = ZeroFactor;\n break;\n }\n\n const blendMode = this.opts.type === TypePass.MULT ? 0 : 1;\n this.uniforms.blendMode = new Uniform(blendMode);\n this.uniformsNeedUpdate = true;\n }\n\n private configureMaterials(opts: VTOPassOpts) {\n this.blending = CustomBlending;\n this.blendEquation = AddEquation;\n this.blendEquationAlpha = AddEquation;\n this.transparent = true;\n\n this.stencilFunc = EqualStencilFunc;\n this.stencilWrite = true;\n this.stencilFuncMask = 0xff;\n\n this.stencilFail = IncrementStencilOp;\n this.stencilZFail = IncrementStencilOp;\n this.stencilZPass = IncrementStencilOp;\n\n this.depthWrite = true;\n this.depthTest = true;\n this.depthFunc = LessEqualDepth;\n\n this.side = DoubleSide;\n\n this.setPass(opts);\n }\n\n public getParameters(): ITransitionMultipassMaterialParameters {\n return this.parameters;\n }\n\n /**\n * Force using ThreeJS Standard MVP Matrices (with MVP multiplication done inside the shaders)\n * @param useStandard\n */\n public useStandardMVP(useStandard: boolean): void {\n this.parameters.useStandardMVPUniform = useStandard;\n this.defines.THREEJS_MATRICES = useStandard ? 1 : 0;\n }\n\n /**\n * Allows to set all shader defines using an ad hoc interface\n * @param newDefines\n */\n public setDefines(newDefines: Partial): void {\n this.parameters.shaderMaterialParameters.defines = { ...this.parameters.shaderMaterialParameters.defines, ...newDefines };\n\n for (const def in newDefines) {\n if (newDefines.hasOwnProperty(def)) this.defines[def] = newDefines[def];\n }\n }\n}\n","import {\n AddEquation,\n Color,\n CubeTexture,\n CustomBlending,\n DoubleSide,\n EqualStencilFunc,\n Euler,\n IncrementStencilOp,\n LessEqualDepth,\n Matrix3,\n NormalBlending,\n OneFactor,\n OneMinusSrcAlphaFactor,\n RawShaderMaterial,\n SrcAlphaFactor,\n SrcColorFactor,\n Texture,\n Uniform,\n Vector3,\n ZeroFactor\n} from 'three';\nimport { Matrix4 } from 'three/src/math/Matrix4';\n\nimport {\n IMirrorMultipassMaterialParameters,\n IMultiMVPSupport,\n IVMMultipassMaterial,\n IVMRendererCoreMaterial,\n TypePass,\n VTOPassOpts\n} from './MaterialInterfaces';\n\nimport vert from '../Shaders/glasses/glasses-b3d-transition-mirror.vert.glsl';\nimport frag from '../Shaders/glasses/glasses-b3d-transition-mirror.frag.glsl';\n\nexport interface IMirrorMaterialDefines {\n THREEJS_MATRICES: number;\n LENS_MASK: number;\n HIDE_LENSES: number;\n HIDE_FRAME: number;\n TRANSITION_LEGACY: number;\n USE_MULTMAP_FOR_TRANSITION: number;\n}\n\n/**\n * Default Parameters\n */\nexport const transitionGlassesMaterialDefaultOpts: IMirrorMultipassMaterialParameters = {\n mvp: new Matrix4().identity(),\n world: new Matrix4().identity(),\n flare: 1,\n taper: 0,\n scale: 0,\n sideInFront: 0,\n fadePositionZ: 0,\n useStandardMVPUniform: false,\n useLensMap: true,\n hideLenses: false,\n colorMap: new Texture(),\n multMap: new Texture(),\n lensMap: new Texture(),\n envMap: new CubeTexture(),\n transmissionCorrectionFactor: 0,\n blendMode: 0,\n enableFade: false,\n shaderMaterialParameters: {\n vertexShader: vert,\n fragmentShader: frag,\n defines: {\n THREEJS_MATRICES: 0,\n LENS_MASK: 1,\n HIDE_LENSES: 0,\n HIDE_FRAME: 0,\n TRANSITION_LEGACY: 1,\n USE_MULTMAP_FOR_TRANSITION: 0\n }\n },\n lensCoatingSpecularity: 1,\n sphereOrigin: new Vector3(0, 0, -150),\n reflectionVecMat: new Matrix3(),\n envMapIntensity: 0.35,\n lensCoatingSpecularColor: new Color(0.8, 0.8, 0.8),\n lensTransmission: new Color(1, 1, 1)\n};\n\n/**\n * Material used in the VTO/VM for B3D Glasses with default or transition (but not mirror) lenses\n */\nexport class GlassesB3DTransitionMirrorMaterial\n extends RawShaderMaterial\n implements IVMRendererCoreMaterial, IMultiMVPSupport, IVMMultipassMaterial\n{\n /**\n * Parameters for material, mainly uniforms and define options\n */\n private parameters: IMirrorMultipassMaterialParameters = transitionGlassesMaterialDefaultOpts;\n public srpType = 'GLASSES_MIRROR_MULTIPASS_MATERIAL';\n\n /**\n * General option for\n */\n private opts: VTOPassOpts = {\n type: TypePass.MULT,\n stencil: 0\n };\n\n constructor(opts?: VTOPassOpts, parameters?: IMirrorMultipassMaterialParameters) {\n // merge default options with passed parameters\n super({\n ...transitionGlassesMaterialDefaultOpts.shaderMaterialParameters,\n ...(parameters ? parameters.shaderMaterialParameters : {})\n });\n\n // init uniforms\n this.initParameters();\n\n // configure material (fixed pipeline funcs)\n this.setPass(opts);\n\n //\n this.setParameters(parameters);\n }\n\n public disposeTexture(): void {\n this.uniforms.multMap.value.dispose();\n this.uniforms.colorMap.value.dispose();\n }\n\n public initParameters(): void {\n for (const key in transitionGlassesMaterialDefaultOpts) {\n if (key === 'useStandardMVPUniform') continue;\n this.uniforms[key] = new Uniform(transitionGlassesMaterialDefaultOpts[key]);\n }\n }\n\n public setParameters(parameters?: IMirrorMultipassMaterialParameters): void {\n // mirror parameters\n if (parameters.lensCoatingSpecularity !== undefined && this.parameters.lensCoatingSpecularity !== parameters.lensCoatingSpecularity)\n this.uniforms.lensCoatingSpecularity.value = parameters.lensCoatingSpecularity;\n\n if (this.isUniformChanged(this.parameters.sphereOrigin, parameters.sphereOrigin))\n this.uniforms.sphereOrigin.value = parameters.sphereOrigin;\n\n if (this.isUniformChanged(this.parameters.envMapIntensity, parameters.envMapIntensity))\n this.uniforms.envMapIntensity.value = parameters.envMapIntensity;\n\n if (this.isUniformChanged(this.parameters.lensCoatingSpecularColor, parameters.lensCoatingSpecularColor))\n this.uniforms.lensCoatingSpecularColor.value = parameters.lensCoatingSpecularColor;\n\n this.parameters = { ...this.parameters, ...parameters };\n\n this.uniforms.reflectionVecMat.value = this.parameters.reflectionVecMat;\n\n this.uniforms.multMap.value = this.parameters.multMap;\n this.uniforms.colorMap.value = this.parameters.colorMap;\n this.uniforms.lensMap.value = this.parameters.lensMap;\n this.uniforms.lensTransmission.value = this.parameters.lensTransmission;\n this.uniforms.transmissionCorrectionFactor.value = this.parameters.transmissionCorrectionFactor;\n this.uniforms.mvp.value = this.parameters.mvp;\n this.uniforms.world.value = this.parameters.world;\n this.uniforms.flare.value = this.parameters.flare;\n this.uniforms.taper.value = this.parameters.taper;\n this.uniforms.scale.value = this.parameters.scale;\n this.uniforms.sideInFront.value = this.parameters.sideInFront;\n this.uniforms.fadePositionZ.value = this.parameters.fadePositionZ;\n this.uniforms.enableFade.value = this.parameters.enableFade ? 1 : 0;\n this.uniforms.blendMode.value = this.parameters.blendMode;\n this.uniforms.envMap.value = this.parameters.envMap;\n this.defines.THREEJS_MATRICES = this.parameters.useStandardMVPUniform ? 1 : 0;\n this.defines.LENS_MASK = this.parameters.useLensMap ? 1 : 0;\n this.defines.HIDE_LENSES = this.parameters.hideLenses ? 1 : 0;\n }\n\n /**\n * Allow to switch between multiplication pass and the additive pass mode\n * The mode set both fixed pipeline parameters (blending function) and a uniform to trigger the correct mode inside the shader\n * @param opts\n */\n public setPass(opts: VTOPassOpts): void {\n this.opts = { ...this.opts, ...opts };\n\n this.stencilRef = this.opts.stencil;\n let blendMode: number;\n\n this.transparent = true;\n\n // add blending function (src + dst)\n this.blending = CustomBlending;\n this.blendEquation = AddEquation;\n this.blendEquationAlpha = AddEquation;\n\n this.stencilFunc = EqualStencilFunc;\n this.stencilWrite = true;\n this.stencilFuncMask = 0xff;\n\n this.stencilFail = IncrementStencilOp;\n this.stencilZFail = IncrementStencilOp;\n this.stencilZPass = IncrementStencilOp;\n\n this.depthWrite = true;\n this.depthTest = true;\n this.depthFunc = LessEqualDepth;\n\n this.side = DoubleSide;\n\n switch (this.opts.type) {\n case TypePass.MULT:\n this.blendSrc = ZeroFactor;\n this.blendDst = SrcColorFactor;\n this.blendSrcAlpha = OneFactor;\n this.blendDstAlpha = ZeroFactor;\n blendMode = 0;\n break;\n case TypePass.ADD:\n this.blendSrc = OneFactor;\n this.blendDst = OneFactor;\n this.blendSrcAlpha = OneFactor;\n this.blendDstAlpha = ZeroFactor;\n blendMode = 1;\n break;\n case TypePass.MIRROR:\n this.blending = NormalBlending;\n\n this.depthTest = true;\n this.depthWrite = false;\n\n // disable stencil with a workaround\n this.stencilFunc = undefined;\n this.stencilWrite = false;\n this.stencilFuncMask = undefined;\n\n // setpass mode inside shader\n blendMode = 2;\n break;\n }\n\n this.uniforms.blendMode = new Uniform(blendMode);\n this.uniformsNeedUpdate = true;\n }\n\n public getParameters(): IMirrorMultipassMaterialParameters {\n return this.parameters;\n }\n\n /**\n * Force using ThreeJS Standard MVP Matrices (with MVP multiplication done inside the shaders)\n * @param useStandard\n */\n public useStandardMVP(useStandard: boolean): void {\n this.parameters.useStandardMVPUniform = useStandard;\n this.defines.THREEJS_MATRICES = useStandard ? 1 : 0;\n }\n\n /**\n * Allows to set all shader defines using an ad hoc interface\n * @param newDefines\n */\n public setDefines(newDefines: Partial): void {\n this.parameters.shaderMaterialParameters.defines = { ...this.parameters.shaderMaterialParameters.defines, ...newDefines };\n\n for (const def in newDefines) {\n if (newDefines.hasOwnProperty(def)) this.defines[def] = newDefines[def];\n }\n }\n\n protected isUniformChanged(currentSetting: unknown, newSetting: unknown): boolean {\n return newSetting !== undefined && currentSetting !== newSetting;\n }\n}\n","import {\n AddEquation,\n Color,\n CubeTexture,\n CustomBlending,\n DoubleSide,\n EqualStencilFunc,\n IncrementStencilOp,\n LessEqualDepth,\n Matrix3,\n NormalBlending,\n OneFactor,\n RawShaderMaterial,\n SrcColorFactor,\n Texture,\n Uniform,\n Vector3,\n ZeroFactor\n} from 'three';\nimport { Matrix4 } from 'three/src/math/Matrix4';\n\nimport {\n IGradientMultipassMaterialParameters,\n IMultiMVPSupport,\n IVMMultipassMaterial,\n IVMRendererCoreMaterial,\n TypePass,\n VTOPassOpts\n} from './MaterialInterfaces';\n\nimport vert from '../Shaders/glasses/glasses-b3d-gradient.vert.glsl';\nimport frag from '../Shaders/glasses/glasses-b3d-gradient.frag.glsl';\n\nexport interface IMGradientMaterialDefines {\n THREEJS_MATRICES: number;\n LENS_MASK: number;\n GRADIENT_VALUES: number;\n HIDE_LENSES: number;\n HIDE_FRAME: number;\n}\n\n/**\n * Default Parameters\n */\nexport const gradientGlassesMaterialDefaultOpts: IGradientMultipassMaterialParameters = {\n mvp: new Matrix4().identity(),\n world: new Matrix4().identity(),\n flare: 1,\n taper: 0,\n scale: 0,\n sideInFront: 0,\n fadePositionZ: 0,\n useStandardMVPUniform: false,\n useLensMap: true,\n colorMap: new Texture(),\n multMap: new Texture(),\n lensMap: new Texture(),\n envMap: new CubeTexture(),\n blendMode: 0,\n enableFade: false,\n shaderMaterialParameters: {\n vertexShader: vert,\n fragmentShader: frag,\n defines: {\n THREEJS_MATRICES: 0,\n LENS_MASK: 1,\n TRANSITION_LEGACY: 1,\n USE_MULTMAP_FOR_TRANSITION: 0,\n GRADIENT_VALUES: 2\n }\n },\n lensCoatingSpecularity: [0.1, 0.1],\n sphereOrigin: new Vector3(0, 0, -150),\n reflectionVecMat: new Matrix3(),\n envMapIntensity: 0.35,\n lensCoatingSpecularColor: [new Color(0.8, 0.8, 0.8), new Color(0.8, 0.8, 0.8)],\n lensTransmission: [new Color(0.5, 0.5, 0.5), new Color(1, 1, 1)],\n heightOnLensInterpolationFactor: [0, 1],\n lensMinY: -1,\n lensMaxY: 1\n};\n\n/**\n * Material used in the VTO/VM for B3D Glasses with default or transition (but not mirror) lenses\n */\nexport class GlassesB3DGradientMaterial\n extends RawShaderMaterial\n implements IVMRendererCoreMaterial, IMultiMVPSupport, IVMMultipassMaterial\n{\n /**\n * Parameters for material, mainly uniforms and define options\n */\n private parameters: IGradientMultipassMaterialParameters = gradientGlassesMaterialDefaultOpts;\n public srpType = 'GLASSES_MIRROR_MULTIPASS_MATERIAL';\n\n /**\n * General option for\n */\n private opts: VTOPassOpts = {\n type: TypePass.MULT,\n stencil: 0\n };\n\n constructor(opts?: VTOPassOpts, parameters?: IGradientMultipassMaterialParameters) {\n // merge default options with passed parameters\n super({\n ...gradientGlassesMaterialDefaultOpts.shaderMaterialParameters,\n ...(parameters ? parameters.shaderMaterialParameters : {})\n });\n\n // init uniforms\n this.initParameters();\n\n // configure material (fixed pipeline funcs)\n this.setPass(opts);\n\n //\n this.setParameters(parameters);\n }\n\n public disposeTexture(): void {\n this.uniforms.multMap.value.dispose();\n this.uniforms.colorMap.value.dispose();\n }\n\n public initParameters(): void {\n for (const key in gradientGlassesMaterialDefaultOpts) {\n if (key === 'useStandardMVPUniform') continue;\n this.uniforms[key] = new Uniform(gradientGlassesMaterialDefaultOpts[key]);\n }\n }\n\n public setParameters(parameters?: IGradientMultipassMaterialParameters): void {\n this.parameters = { ...this.parameters, ...parameters }; // this is the only check on undefined values\n\n this.uniforms.envMapIntensity.value = this.parameters.envMapIntensity;\n this.uniforms.lensCoatingSpecularity.value = this.parameters.lensCoatingSpecularity;\n this.uniforms.lensCoatingSpecularColor.value = this.parameters.lensCoatingSpecularColor;\n\n this.uniforms.sphereOrigin.value = this.parameters.sphereOrigin;\n this.uniforms.reflectionVecMat.value = this.parameters.reflectionVecMat;\n this.uniforms.multMap.value = this.parameters.multMap;\n this.uniforms.colorMap.value = this.parameters.colorMap;\n this.uniforms.lensMap.value = this.parameters.lensMap;\n this.uniforms.lensTransmission.value = this.parameters.lensTransmission;\n this.uniforms.mvp.value = this.parameters.mvp;\n this.uniforms.world.value = this.parameters.world;\n this.uniforms.flare.value = this.parameters.flare;\n this.uniforms.taper.value = this.parameters.taper;\n this.uniforms.scale.value = this.parameters.scale;\n this.uniforms.sideInFront.value = this.parameters.sideInFront;\n this.uniforms.fadePositionZ.value = this.parameters.fadePositionZ;\n this.uniforms.enableFade.value = this.parameters.enableFade ? 1 : 0;\n this.uniforms.blendMode.value = this.parameters.blendMode;\n this.uniforms.envMap.value = this.parameters.envMap;\n this.uniforms.heightOnLensInterpolationFactor.value = this.parameters.heightOnLensInterpolationFactor;\n\n this.uniforms.lensMinY.value = this.parameters.lensMinY;\n this.uniforms.lensMaxY.value = this.parameters.lensMaxY;\n\n if (this.defines.GRADIENT_VALUES !== this.parameters.heightOnLensInterpolationFactor.length) {\n this.needsUpdate = true; // we need to recompile the material\n }\n this.setDefines({ GRADIENT_VALUES: this.parameters.heightOnLensInterpolationFactor.length });\n //this.defines.GRADIENT_VALUES = this.parameters.heightOnLensInterpolationFactor.length;\n this.defines.THREEJS_MATRICES = this.parameters.useStandardMVPUniform ? 1 : 0;\n this.defines.LENS_MASK = this.parameters.useLensMap ? 1 : 0;\n }\n\n /**\n * Allow to switch between multiplication pass and the additive pass mode\n * The mode set both fixed pipeline parameters (blending function) and a uniform to trigger the correct mode inside the shader\n * @param opts\n */\n public setPass(opts: VTOPassOpts): void {\n this.opts = { ...this.opts, ...opts };\n\n this.stencilRef = this.opts.stencil;\n let blendMode: number;\n\n this.transparent = true;\n\n // add blending function (src + dst)\n this.blending = CustomBlending;\n this.blendEquation = AddEquation;\n this.blendEquationAlpha = AddEquation;\n\n this.stencilFunc = EqualStencilFunc;\n this.stencilWrite = true;\n this.stencilFuncMask = 0xff;\n\n this.stencilFail = IncrementStencilOp;\n this.stencilZFail = IncrementStencilOp;\n this.stencilZPass = IncrementStencilOp;\n\n this.depthWrite = true;\n this.depthTest = true;\n this.depthFunc = LessEqualDepth;\n\n this.side = DoubleSide;\n\n switch (this.opts.type) {\n case TypePass.MULT:\n this.blendSrc = ZeroFactor;\n this.blendDst = SrcColorFactor;\n this.blendSrcAlpha = OneFactor;\n this.blendDstAlpha = ZeroFactor;\n blendMode = 0;\n break;\n case TypePass.ADD:\n this.blendSrc = OneFactor;\n this.blendDst = OneFactor;\n this.blendSrcAlpha = OneFactor;\n this.blendDstAlpha = ZeroFactor;\n blendMode = 1;\n break;\n case TypePass.MIRROR:\n this.blending = NormalBlending;\n\n this.depthTest = true;\n this.depthWrite = false;\n\n // disable stencil with a workaround\n this.stencilFunc = undefined;\n this.stencilWrite = false;\n this.stencilFuncMask = undefined;\n\n // setpass mode inside shader\n blendMode = 2;\n break;\n }\n\n this.uniforms.blendMode = new Uniform(blendMode);\n this.uniformsNeedUpdate = true;\n }\n\n public getParameters(): IGradientMultipassMaterialParameters {\n return this.parameters;\n }\n\n /**\n * Force using ThreeJS Standard MVP Matrices (with MVP multiplication done inside the shaders)\n * @param useStandard\n */\n public useStandardMVP(useStandard: boolean): void {\n this.parameters.useStandardMVPUniform = useStandard;\n this.defines.THREEJS_MATRICES = useStandard ? 1 : 0;\n }\n\n /**\n * Allows to set all shader defines using an ad hoc interface\n * @param newDefines\n */\n public setDefines(newDefines: Partial): void {\n this.parameters.shaderMaterialParameters.defines = { ...this.parameters.shaderMaterialParameters.defines, ...newDefines };\n\n for (const def in newDefines) {\n if (newDefines.hasOwnProperty(def)) this.defines[def] = newDefines[def];\n }\n }\n\n protected isUniformChanged(currentSetting: unknown, newSetting: unknown): boolean {\n return newSetting !== undefined && currentSetting !== newSetting;\n }\n}\n","import { BufferGeometry, Matrix4, Mesh } from 'three';\n\nimport { GlassesBspDebugOpts, GlassesB3DGeometry } from '../Geometry/GlassesB3DGeometry';\n\nimport { computeYRotation } from '../Helpers/MathUtils';\nimport { fix, GlassesOpts, glassesOptsDefault } from '../Meshes/GlassesInterfaces';\nimport { AttributesDebugMaterial } from '../Materials/AttributesDebugMaterial';\n\nimport { B3DMeshMaterialState, IB3DMeshOpts, IB3DMeshTextures, IGlassesData } from '../Meshes/IB3DMesh';\nimport { IB3DGlassesMaterialParameters, TypePass } from '../Materials/MaterialInterfaces';\nimport { GlassesB3DTransitionMaterial } from '../Materials/GlassesB3DTransitionMaterial';\nimport { GlassesB3DTransitionMirrorMaterial } from '../Materials/GlassesB3DTransitionMirrorMaterial';\nimport { GlassesB3DGradientMaterial } from '../Materials/GlassesB3DGradientMaterial';\n\nexport const defaultB3DMeshOpts: IB3DMeshOpts = {\n initMaterialState: B3DMeshMaterialState.TRANSITION,\n debugEnabled: false,\n maxViews: 15,\n maxDegreeRotation: 90,\n useStandardMVPUniform: false\n};\n\n/**\n *\n */\nexport class B3DMesh extends Mesh {\n protected options: IB3DMeshOpts;\n\n // mv from poses\n protected mvps: Matrix4[];\n\n // resource upc (universal product code)\n protected resource: string;\n\n // glasses textures\n protected textures: IB3DMeshTextures;\n\n // available and supported materials\n protected debugMat: AttributesDebugMaterial;\n protected transitionMat: GlassesB3DTransitionMaterial;\n protected mirrorMat: GlassesB3DTransitionMirrorMaterial;\n\n protected gradientMat: GlassesB3DGradientMaterial;\n\n protected multiPassEnabled: boolean;\n protected debugEnabled: boolean;\n protected currentMaterialState: B3DMeshMaterialState;\n\n // bsp loader\n protected bspGeometry: GlassesB3DGeometry;\n\n //\n protected glassesOpts: GlassesOpts = glassesOptsDefault;\n protected poseIndex: number;\n\n constructor(bspGeometry: GlassesB3DGeometry, b3dData?: IGlassesData, opts?: IB3DMeshOpts) {\n super(bspGeometry.getBufferGeometry());\n\n this.geometry.computeBoundingBox();\n\n // extend options\n this.options = { ...defaultB3DMeshOpts, ...opts };\n\n // saving textures\n this.textures = {\n colors: b3dData.glassesColors,\n mult: b3dData.glassesMult,\n lens: b3dData.glassesLens,\n shadow: b3dData.glassesShadow\n };\n\n this.bspGeometry = bspGeometry;\n this.resource = b3dData.resource;\n\n this.initMaterials();\n this.changeMaterialState(this.options.initMaterialState);\n }\n\n public dispose(): void {\n this.bspGeometry = undefined;\n }\n\n protected initMaterials(): void {\n const defaultColorTextureIndex = this.textures.colors !== undefined ? Math.floor(this.textures.colors.length / 2) : 0;\n\n this.debugMat = new AttributesDebugMaterial();\n\n this.transitionMat = new GlassesB3DTransitionMaterial(\n {\n type: TypePass.MULT,\n stencil: 0\n },\n {\n colorMap: this.textures.colors[defaultColorTextureIndex],\n multMap: this.textures.mult,\n lensMap: this.textures.lens,\n flare: this.getBSP().getFlare(),\n useStandardMVPUniform: this.options.useStandardMVPUniform\n }\n );\n\n this.mirrorMat = new GlassesB3DTransitionMirrorMaterial(\n {\n type: TypePass.MULT,\n stencil: 0\n },\n {\n colorMap: this.textures.colors[defaultColorTextureIndex],\n multMap: this.textures.mult,\n lensMap: this.textures.lens,\n flare: this.getBSP().getFlare(),\n useStandardMVPUniform: this.options.useStandardMVPUniform\n }\n );\n\n this.gradientMat = new GlassesB3DGradientMaterial(\n {\n type: TypePass.MULT,\n stencil: 0\n },\n {\n colorMap: this.textures.colors[defaultColorTextureIndex],\n multMap: this.textures.mult,\n lensMap: this.textures.lens,\n flare: this.getBSP().getFlare(),\n useStandardMVPUniform: this.options.useStandardMVPUniform\n }\n );\n }\n\n /**\n *\n * @returns the upc of the b3d glasses\n */\n public getResource(): string {\n return this.resource;\n }\n\n /**\n * It returns the textures object containing colors, mult and shadow texture\n * @returns texture object\n */\n public getTextures(): IB3DMeshTextures {\n return this.textures;\n }\n\n /* material setters */\n\n public setDebugMaterial(debug: AttributesDebugMaterial): void {\n this.debugMat = debug;\n }\n\n public setTransitionMaterial(transition: GlassesB3DTransitionMaterial): void {\n this.transitionMat = transition;\n }\n\n public setMirrorMaterial(mirror: GlassesB3DTransitionMirrorMaterial): void {\n this.mirrorMat = mirror;\n }\n\n public setGradientMaterial(gradient: GlassesB3DGradientMaterial): void {\n this.gradientMat = gradient;\n }\n\n /* material getters */\n\n public getDebugMaterial(): AttributesDebugMaterial {\n return this.debugMat;\n }\n\n public getTransitionMaterial(): GlassesB3DTransitionMaterial {\n return this.transitionMat;\n }\n\n public getMirrorMaterial(): GlassesB3DTransitionMirrorMaterial {\n // return this.mirrorMat;\n return this.mirrorMat;\n }\n\n public getGradientMaterial(): GlassesB3DGradientMaterial {\n return this.gradientMat;\n }\n\n /**\n * set the material property for ThreeJS Mesh and update the \"multiPassEnabled\" flag to inform the renderer to do multi pass rendering\n * @param newState the material state to set for the mesh\n */\n public changeMaterialState(newState: B3DMeshMaterialState): void {\n this.multiPassEnabled = false;\n this.currentMaterialState = newState;\n\n switch (newState) {\n case B3DMeshMaterialState.DEBUG:\n this.material = this.debugMat;\n this.debugEnabled = true;\n break;\n case B3DMeshMaterialState.TRANSITION:\n this.material = this.transitionMat;\n this.multiPassEnabled = true;\n break;\n case B3DMeshMaterialState.MIRROR:\n this.material = this.mirrorMat;\n this.multiPassEnabled = true;\n break;\n case B3DMeshMaterialState.GRADIENT:\n this.material = this.gradientMat;\n this.multiPassEnabled = true;\n break;\n }\n }\n\n public shouldMultiPass(): boolean {\n return this.multiPassEnabled;\n }\n\n /**\n * Build sorted triangles list starting from a matrices vector\n * @param mvps\n */\n public buildIBOFromMVPArray(mvps: Matrix4[]): B3DMesh {\n this.mvps = mvps;\n this.bspGeometry.sortTrianglesForAllFrames(mvps);\n\n return this;\n }\n\n public getPose(): number {\n return this.poseIndex;\n }\n\n public getBSP(): GlassesB3DGeometry {\n return this.bspGeometry;\n }\n\n public setBsp(bspGeometry: GlassesB3DGeometry): void {\n this.bspGeometry = bspGeometry;\n }\n\n /**\n * Update both buffer geometry and color map in all shader materials.\n * If updateRotation is true it computes and applies a y axis rotation to glasses\n * @param poseIndex number of selected pose\n * @param debug debug structure for GlassesB3DGeometry\n */\n public setPose(poseIndex: number, poseIndexTexture?: number, debug?: GlassesBspDebugOpts): void {\n this.poseIndex = poseIndex;\n\n poseIndexTexture = poseIndexTexture ?? poseIndex;\n\n // update buffer geometry\n this.bspGeometry.updateIBODataFromPose(poseIndex, debug);\n const buffer: BufferGeometry = this.bspGeometry.getBufferGeometry();\n this.geometry = buffer;\n\n if (this.currentMaterialState === B3DMeshMaterialState.DEBUG) return;\n\n this.transitionMat.setParameters({\n colorMap: this.textures.colors[poseIndexTexture]\n });\n\n this.mirrorMat.setParameters({\n colorMap: this.textures.colors[poseIndexTexture]\n });\n\n this.gradientMat.setParameters({\n colorMap: this.textures.colors[poseIndexTexture]\n });\n }\n\n getFlare(): number {\n return this.bspGeometry.getFlare();\n }\n\n computeNormals(): void {\n this.bspGeometry.getBufferGeometry().computeVertexNormals();\n }\n\n hasNormals(): boolean {\n return this.bspGeometry.getBufferGeometry().getAttribute('normal') !== undefined;\n }\n\n matrixToString(pose: number): string {\n const matrix = [];\n const elements = this.mvps[pose].elements;\n matrix.push(\n elements\n .slice(0, 4)\n .map((value) => value.toFixed(fix))\n .toString()\n );\n matrix.push(\n elements\n .slice(4, 8)\n .map((value) => value.toFixed(fix))\n .toString()\n );\n matrix.push(\n elements\n .slice(8, 12)\n .map((value) => value.toFixed(fix))\n .toString()\n );\n matrix.push(\n elements\n .slice(12, 16)\n .map((value) => value.toFixed(fix))\n .toString()\n );\n return matrix.join('\\n');\n }\n}\n","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\nimport * as $protobuf from 'protobufjs/minimal';\n\n// Common aliases\nconst $Reader = $protobuf.Reader,\n $Writer = $protobuf.Writer,\n $util = $protobuf.util;\n\n// Exported root namespace\nconst $root = $protobuf.roots['default'] || ($protobuf.roots['default'] = {});\n\nexport const Binocular3DObject = ($root.Binocular3DObject = (() => {\n /**\n * Namespace Binocular3DObject.\n * @exports Binocular3DObject\n * @namespace\n */\n const Binocular3DObject = {};\n\n Binocular3DObject.B3DVertex = (function () {\n /**\n * Properties of a B3DVertex.\n * @memberof Binocular3DObject\n * @interface IB3DVertex\n * @property {number} x B3DVertex x\n * @property {number} y B3DVertex y\n * @property {number|null} [z] B3DVertex z\n * @property {number|null} [w] B3DVertex w\n * @property {number|null} [u] B3DVertex u\n * @property {number|null} [v] B3DVertex v\n * @property {number|null} [s] B3DVertex s\n * @property {number|null} [t] B3DVertex t\n * @property {number|null} [r] B3DVertex r\n * @property {number|null} [g] B3DVertex g\n * @property {number|null} [b] B3DVertex b\n * @property {number|null} [a] B3DVertex a\n * @property {number|null} [nx] B3DVertex nx\n * @property {number|null} [ny] B3DVertex ny\n * @property {number|null} [nz] B3DVertex nz\n * @property {number|null} [nw] B3DVertex nw\n */\n\n /**\n * Constructs a new B3DVertex.\n * @memberof Binocular3DObject\n * @classdesc Represents a B3DVertex.\n * @implements IB3DVertex\n * @constructor\n * @param {Binocular3DObject.IB3DVertex=} [properties] Properties to set\n */\n function B3DVertex(properties) {\n if (properties)\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * B3DVertex x.\n * @member {number} x\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.x = 0;\n\n /**\n * B3DVertex y.\n * @member {number} y\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.y = 0;\n\n /**\n * B3DVertex z.\n * @member {number} z\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.z = 0;\n\n /**\n * B3DVertex w.\n * @member {number} w\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.w = 63;\n\n /**\n * B3DVertex u.\n * @member {number} u\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.u = 0;\n\n /**\n * B3DVertex v.\n * @member {number} v\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.v = 0;\n\n /**\n * B3DVertex s.\n * @member {number} s\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.s = 0;\n\n /**\n * B3DVertex t.\n * @member {number} t\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.t = 1024;\n\n /**\n * B3DVertex r.\n * @member {number} r\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.r = 0;\n\n /**\n * B3DVertex g.\n * @member {number} g\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.g = 0;\n\n /**\n * B3DVertex b.\n * @member {number} b\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.b = 0;\n\n /**\n * B3DVertex a.\n * @member {number} a\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.a = 127;\n\n /**\n * B3DVertex nx.\n * @member {number} nx\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.nx = 0;\n\n /**\n * B3DVertex ny.\n * @member {number} ny\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.ny = 0;\n\n /**\n * B3DVertex nz.\n * @member {number} nz\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.nz = 127;\n\n /**\n * B3DVertex nw.\n * @member {number} nw\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n */\n B3DVertex.prototype.nw = 127;\n\n /**\n * Creates a new B3DVertex instance using the specified properties.\n * @function create\n * @memberof Binocular3DObject.B3DVertex\n * @static\n * @param {Binocular3DObject.IB3DVertex=} [properties] Properties to set\n * @returns {Binocular3DObject.B3DVertex} B3DVertex instance\n */\n B3DVertex.create = function create(properties) {\n return new B3DVertex(properties);\n };\n\n /**\n * Encodes the specified B3DVertex message. Does not implicitly {@link Binocular3DObject.B3DVertex.verify|verify} messages.\n * @function encode\n * @memberof Binocular3DObject.B3DVertex\n * @static\n * @param {Binocular3DObject.IB3DVertex} message B3DVertex message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n B3DVertex.encode = function encode(message, writer) {\n if (!writer) writer = $Writer.create();\n writer.uint32(/* id 1, wireType 0 =*/ 8).sint32(message.x);\n writer.uint32(/* id 2, wireType 0 =*/ 16).sint32(message.y);\n if (message.z != null && Object.hasOwnProperty.call(message, 'z'))\n writer.uint32(/* id 3, wireType 0 =*/ 24).sint32(message.z);\n if (message.w != null && Object.hasOwnProperty.call(message, 'w'))\n writer.uint32(/* id 4, wireType 0 =*/ 32).sint32(message.w);\n if (message.u != null && Object.hasOwnProperty.call(message, 'u'))\n writer.uint32(/* id 5, wireType 0 =*/ 40).sint32(message.u);\n if (message.v != null && Object.hasOwnProperty.call(message, 'v'))\n writer.uint32(/* id 6, wireType 0 =*/ 48).sint32(message.v);\n if (message.s != null && Object.hasOwnProperty.call(message, 's'))\n writer.uint32(/* id 7, wireType 0 =*/ 56).sint32(message.s);\n if (message.t != null && Object.hasOwnProperty.call(message, 't'))\n writer.uint32(/* id 8, wireType 0 =*/ 64).sint32(message.t);\n if (message.r != null && Object.hasOwnProperty.call(message, 'r'))\n writer.uint32(/* id 9, wireType 0 =*/ 72).sint32(message.r);\n if (message.g != null && Object.hasOwnProperty.call(message, 'g'))\n writer.uint32(/* id 10, wireType 0 =*/ 80).sint32(message.g);\n if (message.b != null && Object.hasOwnProperty.call(message, 'b'))\n writer.uint32(/* id 11, wireType 0 =*/ 88).sint32(message.b);\n if (message.a != null && Object.hasOwnProperty.call(message, 'a'))\n writer.uint32(/* id 12, wireType 0 =*/ 96).sint32(message.a);\n if (message.nx != null && Object.hasOwnProperty.call(message, 'nx'))\n writer.uint32(/* id 13, wireType 0 =*/ 104).sint32(message.nx);\n if (message.ny != null && Object.hasOwnProperty.call(message, 'ny'))\n writer.uint32(/* id 14, wireType 0 =*/ 112).sint32(message.ny);\n if (message.nz != null && Object.hasOwnProperty.call(message, 'nz'))\n writer.uint32(/* id 15, wireType 0 =*/ 120).sint32(message.nz);\n if (message.nw != null && Object.hasOwnProperty.call(message, 'nw'))\n writer.uint32(/* id 16, wireType 0 =*/ 128).sint32(message.nw);\n return writer;\n };\n\n /**\n * Encodes the specified B3DVertex message, length delimited. Does not implicitly {@link Binocular3DObject.B3DVertex.verify|verify} messages.\n * @function encodeDelimited\n * @memberof Binocular3DObject.B3DVertex\n * @static\n * @param {Binocular3DObject.IB3DVertex} message B3DVertex message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n B3DVertex.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a B3DVertex message from the specified reader or buffer.\n * @function decode\n * @memberof Binocular3DObject.B3DVertex\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {Binocular3DObject.B3DVertex} B3DVertex\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n B3DVertex.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n let end = length === undefined ? reader.len : reader.pos + length,\n message = new $root.Binocular3DObject.B3DVertex();\n while (reader.pos < end) {\n let tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.x = reader.sint32();\n break;\n case 2:\n message.y = reader.sint32();\n break;\n case 3:\n message.z = reader.sint32();\n break;\n case 4:\n message.w = reader.sint32();\n break;\n case 5:\n message.u = reader.sint32();\n break;\n case 6:\n message.v = reader.sint32();\n break;\n case 7:\n message.s = reader.sint32();\n break;\n case 8:\n message.t = reader.sint32();\n break;\n case 9:\n message.r = reader.sint32();\n break;\n case 10:\n message.g = reader.sint32();\n break;\n case 11:\n message.b = reader.sint32();\n break;\n case 12:\n message.a = reader.sint32();\n break;\n case 13:\n message.nx = reader.sint32();\n break;\n case 14:\n message.ny = reader.sint32();\n break;\n case 15:\n message.nz = reader.sint32();\n break;\n case 16:\n message.nw = reader.sint32();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n if (!message.hasOwnProperty('x'))\n throw $util.ProtocolError(\"missing required 'x'\", {\n instance: message,\n });\n if (!message.hasOwnProperty('y'))\n throw $util.ProtocolError(\"missing required 'y'\", {\n instance: message,\n });\n return message;\n };\n\n /**\n * Decodes a B3DVertex message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof Binocular3DObject.B3DVertex\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Binocular3DObject.B3DVertex} B3DVertex\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n B3DVertex.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a B3DVertex message.\n * @function verify\n * @memberof Binocular3DObject.B3DVertex\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n B3DVertex.verify = function verify(message) {\n if (typeof message !== 'object' || message === null)\n return 'object expected';\n if (!$util.isInteger(message.x)) return 'x: integer expected';\n if (!$util.isInteger(message.y)) return 'y: integer expected';\n if (message.z != null && message.hasOwnProperty('z'))\n if (!$util.isInteger(message.z)) return 'z: integer expected';\n if (message.w != null && message.hasOwnProperty('w'))\n if (!$util.isInteger(message.w)) return 'w: integer expected';\n if (message.u != null && message.hasOwnProperty('u'))\n if (!$util.isInteger(message.u)) return 'u: integer expected';\n if (message.v != null && message.hasOwnProperty('v'))\n if (!$util.isInteger(message.v)) return 'v: integer expected';\n if (message.s != null && message.hasOwnProperty('s'))\n if (!$util.isInteger(message.s)) return 's: integer expected';\n if (message.t != null && message.hasOwnProperty('t'))\n if (!$util.isInteger(message.t)) return 't: integer expected';\n if (message.r != null && message.hasOwnProperty('r'))\n if (!$util.isInteger(message.r)) return 'r: integer expected';\n if (message.g != null && message.hasOwnProperty('g'))\n if (!$util.isInteger(message.g)) return 'g: integer expected';\n if (message.b != null && message.hasOwnProperty('b'))\n if (!$util.isInteger(message.b)) return 'b: integer expected';\n if (message.a != null && message.hasOwnProperty('a'))\n if (!$util.isInteger(message.a)) return 'a: integer expected';\n if (message.nx != null && message.hasOwnProperty('nx'))\n if (!$util.isInteger(message.nx)) return 'nx: integer expected';\n if (message.ny != null && message.hasOwnProperty('ny'))\n if (!$util.isInteger(message.ny)) return 'ny: integer expected';\n if (message.nz != null && message.hasOwnProperty('nz'))\n if (!$util.isInteger(message.nz)) return 'nz: integer expected';\n if (message.nw != null && message.hasOwnProperty('nw'))\n if (!$util.isInteger(message.nw)) return 'nw: integer expected';\n return null;\n };\n\n /**\n * Creates a B3DVertex message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Binocular3DObject.B3DVertex\n * @static\n * @param {Object.} object Plain object\n * @returns {Binocular3DObject.B3DVertex} B3DVertex\n */\n B3DVertex.fromObject = function fromObject(object) {\n if (object instanceof $root.Binocular3DObject.B3DVertex) return object;\n let message = new $root.Binocular3DObject.B3DVertex();\n if (object.x != null) message.x = object.x | 0;\n if (object.y != null) message.y = object.y | 0;\n if (object.z != null) message.z = object.z | 0;\n if (object.w != null) message.w = object.w | 0;\n if (object.u != null) message.u = object.u | 0;\n if (object.v != null) message.v = object.v | 0;\n if (object.s != null) message.s = object.s | 0;\n if (object.t != null) message.t = object.t | 0;\n if (object.r != null) message.r = object.r | 0;\n if (object.g != null) message.g = object.g | 0;\n if (object.b != null) message.b = object.b | 0;\n if (object.a != null) message.a = object.a | 0;\n if (object.nx != null) message.nx = object.nx | 0;\n if (object.ny != null) message.ny = object.ny | 0;\n if (object.nz != null) message.nz = object.nz | 0;\n if (object.nw != null) message.nw = object.nw | 0;\n return message;\n };\n\n /**\n * Creates a plain object from a B3DVertex message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Binocular3DObject.B3DVertex\n * @static\n * @param {Binocular3DObject.B3DVertex} message B3DVertex\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n B3DVertex.toObject = function toObject(message, options) {\n if (!options) options = {};\n let object = {};\n if (options.defaults) {\n object.x = 0;\n object.y = 0;\n object.z = 0;\n object.w = 63;\n object.u = 0;\n object.v = 0;\n object.s = 0;\n object.t = 1024;\n object.r = 0;\n object.g = 0;\n object.b = 0;\n object.a = 127;\n object.nx = 0;\n object.ny = 0;\n object.nz = 127;\n object.nw = 127;\n }\n if (message.x != null && message.hasOwnProperty('x'))\n object.x = message.x;\n if (message.y != null && message.hasOwnProperty('y'))\n object.y = message.y;\n if (message.z != null && message.hasOwnProperty('z'))\n object.z = message.z;\n if (message.w != null && message.hasOwnProperty('w'))\n object.w = message.w;\n if (message.u != null && message.hasOwnProperty('u'))\n object.u = message.u;\n if (message.v != null && message.hasOwnProperty('v'))\n object.v = message.v;\n if (message.s != null && message.hasOwnProperty('s'))\n object.s = message.s;\n if (message.t != null && message.hasOwnProperty('t'))\n object.t = message.t;\n if (message.r != null && message.hasOwnProperty('r'))\n object.r = message.r;\n if (message.g != null && message.hasOwnProperty('g'))\n object.g = message.g;\n if (message.b != null && message.hasOwnProperty('b'))\n object.b = message.b;\n if (message.a != null && message.hasOwnProperty('a'))\n object.a = message.a;\n if (message.nx != null && message.hasOwnProperty('nx'))\n object.nx = message.nx;\n if (message.ny != null && message.hasOwnProperty('ny'))\n object.ny = message.ny;\n if (message.nz != null && message.hasOwnProperty('nz'))\n object.nz = message.nz;\n if (message.nw != null && message.hasOwnProperty('nw'))\n object.nw = message.nw;\n return object;\n };\n\n /**\n * Converts this B3DVertex to JSON.\n * @function toJSON\n * @memberof Binocular3DObject.B3DVertex\n * @instance\n * @returns {Object.} JSON object\n */\n B3DVertex.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return B3DVertex;\n })();\n\n Binocular3DObject.B3DTriangle = (function () {\n /**\n * Properties of a B3DTriangle.\n * @memberof Binocular3DObject\n * @interface IB3DTriangle\n * @property {number} A B3DTriangle A\n * @property {number} B B3DTriangle B\n * @property {number} C B3DTriangle C\n * @property {boolean|null} [hasFront] B3DTriangle hasFront\n * @property {boolean|null} [hasCoplanar] B3DTriangle hasCoplanar\n * @property {boolean|null} [hasBack] B3DTriangle hasBack\n */\n\n /**\n * Constructs a new B3DTriangle.\n * @memberof Binocular3DObject\n * @classdesc Represents a B3DTriangle.\n * @implements IB3DTriangle\n * @constructor\n * @param {Binocular3DObject.IB3DTriangle=} [properties] Properties to set\n */\n function B3DTriangle(properties) {\n if (properties)\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * B3DTriangle A.\n * @member {number} A\n * @memberof Binocular3DObject.B3DTriangle\n * @instance\n */\n B3DTriangle.prototype.A = 0;\n\n /**\n * B3DTriangle B.\n * @member {number} B\n * @memberof Binocular3DObject.B3DTriangle\n * @instance\n */\n B3DTriangle.prototype.B = 0;\n\n /**\n * B3DTriangle C.\n * @member {number} C\n * @memberof Binocular3DObject.B3DTriangle\n * @instance\n */\n B3DTriangle.prototype.C = 0;\n\n /**\n * B3DTriangle hasFront.\n * @member {boolean} hasFront\n * @memberof Binocular3DObject.B3DTriangle\n * @instance\n */\n B3DTriangle.prototype.hasFront = false;\n\n /**\n * B3DTriangle hasCoplanar.\n * @member {boolean} hasCoplanar\n * @memberof Binocular3DObject.B3DTriangle\n * @instance\n */\n B3DTriangle.prototype.hasCoplanar = false;\n\n /**\n * B3DTriangle hasBack.\n * @member {boolean} hasBack\n * @memberof Binocular3DObject.B3DTriangle\n * @instance\n */\n B3DTriangle.prototype.hasBack = false;\n\n /**\n * Creates a new B3DTriangle instance using the specified properties.\n * @function create\n * @memberof Binocular3DObject.B3DTriangle\n * @static\n * @param {Binocular3DObject.IB3DTriangle=} [properties] Properties to set\n * @returns {Binocular3DObject.B3DTriangle} B3DTriangle instance\n */\n B3DTriangle.create = function create(properties) {\n return new B3DTriangle(properties);\n };\n\n /**\n * Encodes the specified B3DTriangle message. Does not implicitly {@link Binocular3DObject.B3DTriangle.verify|verify} messages.\n * @function encode\n * @memberof Binocular3DObject.B3DTriangle\n * @static\n * @param {Binocular3DObject.IB3DTriangle} message B3DTriangle message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n B3DTriangle.encode = function encode(message, writer) {\n if (!writer) writer = $Writer.create();\n writer.uint32(/* id 1, wireType 0 =*/ 8).int32(message.A);\n writer.uint32(/* id 2, wireType 0 =*/ 16).int32(message.B);\n writer.uint32(/* id 3, wireType 0 =*/ 24).int32(message.C);\n if (\n message.hasFront != null &&\n Object.hasOwnProperty.call(message, 'hasFront')\n )\n writer.uint32(/* id 4, wireType 0 =*/ 32).bool(message.hasFront);\n if (\n message.hasCoplanar != null &&\n Object.hasOwnProperty.call(message, 'hasCoplanar')\n )\n writer.uint32(/* id 5, wireType 0 =*/ 40).bool(message.hasCoplanar);\n if (\n message.hasBack != null &&\n Object.hasOwnProperty.call(message, 'hasBack')\n )\n writer.uint32(/* id 6, wireType 0 =*/ 48).bool(message.hasBack);\n return writer;\n };\n\n /**\n * Encodes the specified B3DTriangle message, length delimited. Does not implicitly {@link Binocular3DObject.B3DTriangle.verify|verify} messages.\n * @function encodeDelimited\n * @memberof Binocular3DObject.B3DTriangle\n * @static\n * @param {Binocular3DObject.IB3DTriangle} message B3DTriangle message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n B3DTriangle.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a B3DTriangle message from the specified reader or buffer.\n * @function decode\n * @memberof Binocular3DObject.B3DTriangle\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {Binocular3DObject.B3DTriangle} B3DTriangle\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n B3DTriangle.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n let end = length === undefined ? reader.len : reader.pos + length,\n message = new $root.Binocular3DObject.B3DTriangle();\n while (reader.pos < end) {\n let tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.A = reader.int32();\n break;\n case 2:\n message.B = reader.int32();\n break;\n case 3:\n message.C = reader.int32();\n break;\n case 4:\n message.hasFront = reader.bool();\n break;\n case 5:\n message.hasCoplanar = reader.bool();\n break;\n case 6:\n message.hasBack = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n if (!message.hasOwnProperty('A'))\n throw $util.ProtocolError(\"missing required 'A'\", {\n instance: message,\n });\n if (!message.hasOwnProperty('B'))\n throw $util.ProtocolError(\"missing required 'B'\", {\n instance: message,\n });\n if (!message.hasOwnProperty('C'))\n throw $util.ProtocolError(\"missing required 'C'\", {\n instance: message,\n });\n return message;\n };\n\n /**\n * Decodes a B3DTriangle message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof Binocular3DObject.B3DTriangle\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Binocular3DObject.B3DTriangle} B3DTriangle\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n B3DTriangle.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a B3DTriangle message.\n * @function verify\n * @memberof Binocular3DObject.B3DTriangle\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n B3DTriangle.verify = function verify(message) {\n if (typeof message !== 'object' || message === null)\n return 'object expected';\n if (!$util.isInteger(message.A)) return 'A: integer expected';\n if (!$util.isInteger(message.B)) return 'B: integer expected';\n if (!$util.isInteger(message.C)) return 'C: integer expected';\n if (message.hasFront != null && message.hasOwnProperty('hasFront'))\n if (typeof message.hasFront !== 'boolean')\n return 'hasFront: boolean expected';\n if (message.hasCoplanar != null && message.hasOwnProperty('hasCoplanar'))\n if (typeof message.hasCoplanar !== 'boolean')\n return 'hasCoplanar: boolean expected';\n if (message.hasBack != null && message.hasOwnProperty('hasBack'))\n if (typeof message.hasBack !== 'boolean')\n return 'hasBack: boolean expected';\n return null;\n };\n\n /**\n * Creates a B3DTriangle message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Binocular3DObject.B3DTriangle\n * @static\n * @param {Object.} object Plain object\n * @returns {Binocular3DObject.B3DTriangle} B3DTriangle\n */\n B3DTriangle.fromObject = function fromObject(object) {\n if (object instanceof $root.Binocular3DObject.B3DTriangle) return object;\n let message = new $root.Binocular3DObject.B3DTriangle();\n if (object.A != null) message.A = object.A | 0;\n if (object.B != null) message.B = object.B | 0;\n if (object.C != null) message.C = object.C | 0;\n if (object.hasFront != null) message.hasFront = Boolean(object.hasFront);\n if (object.hasCoplanar != null)\n message.hasCoplanar = Boolean(object.hasCoplanar);\n if (object.hasBack != null) message.hasBack = Boolean(object.hasBack);\n return message;\n };\n\n /**\n * Creates a plain object from a B3DTriangle message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Binocular3DObject.B3DTriangle\n * @static\n * @param {Binocular3DObject.B3DTriangle} message B3DTriangle\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n B3DTriangle.toObject = function toObject(message, options) {\n if (!options) options = {};\n let object = {};\n if (options.defaults) {\n object.A = 0;\n object.B = 0;\n object.C = 0;\n object.hasFront = false;\n object.hasCoplanar = false;\n object.hasBack = false;\n }\n if (message.A != null && message.hasOwnProperty('A'))\n object.A = message.A;\n if (message.B != null && message.hasOwnProperty('B'))\n object.B = message.B;\n if (message.C != null && message.hasOwnProperty('C'))\n object.C = message.C;\n if (message.hasFront != null && message.hasOwnProperty('hasFront'))\n object.hasFront = message.hasFront;\n if (message.hasCoplanar != null && message.hasOwnProperty('hasCoplanar'))\n object.hasCoplanar = message.hasCoplanar;\n if (message.hasBack != null && message.hasOwnProperty('hasBack'))\n object.hasBack = message.hasBack;\n return object;\n };\n\n /**\n * Converts this B3DTriangle to JSON.\n * @function toJSON\n * @memberof Binocular3DObject.B3DTriangle\n * @instance\n * @returns {Object.} JSON object\n */\n B3DTriangle.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return B3DTriangle;\n })();\n\n Binocular3DObject.B3DObject = (function () {\n /**\n * Properties of a B3DObject.\n * @memberof Binocular3DObject\n * @interface IB3DObject\n * @property {string|null} [name] B3DObject name\n * @property {boolean|null} [isBSP] B3DObject isBSP\n * @property {number|null} [flare] B3DObject flare\n * @property {Array.|null} [childlist] B3DObject childlist\n * @property {Array.|null} [vlist] B3DObject vlist\n * @property {Array.|null} [tlist] B3DObject tlist\n */\n\n /**\n * Constructs a new B3DObject.\n * @memberof Binocular3DObject\n * @classdesc Represents a B3DObject.\n * @implements IB3DObject\n * @constructor\n * @param {Binocular3DObject.IB3DObject=} [properties] Properties to set\n */\n function B3DObject(properties) {\n this.childlist = [];\n this.vlist = [];\n this.tlist = [];\n if (properties)\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null) this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * B3DObject name.\n * @member {string} name\n * @memberof Binocular3DObject.B3DObject\n * @instance\n */\n B3DObject.prototype.name = 'NoName';\n\n /**\n * B3DObject isBSP.\n * @member {boolean} isBSP\n * @memberof Binocular3DObject.B3DObject\n * @instance\n */\n B3DObject.prototype.isBSP = false;\n\n /**\n * B3DObject flare.\n * @member {number} flare\n * @memberof Binocular3DObject.B3DObject\n * @instance\n */\n B3DObject.prototype.flare = 30;\n\n /**\n * B3DObject childlist.\n * @member {Array.} childlist\n * @memberof Binocular3DObject.B3DObject\n * @instance\n */\n B3DObject.prototype.childlist = $util.emptyArray;\n\n /**\n * B3DObject vlist.\n * @member {Array.} vlist\n * @memberof Binocular3DObject.B3DObject\n * @instance\n */\n B3DObject.prototype.vlist = $util.emptyArray;\n\n /**\n * B3DObject tlist.\n * @member {Array.} tlist\n * @memberof Binocular3DObject.B3DObject\n * @instance\n */\n B3DObject.prototype.tlist = $util.emptyArray;\n\n /**\n * Creates a new B3DObject instance using the specified properties.\n * @function create\n * @memberof Binocular3DObject.B3DObject\n * @static\n * @param {Binocular3DObject.IB3DObject=} [properties] Properties to set\n * @returns {Binocular3DObject.B3DObject} B3DObject instance\n */\n B3DObject.create = function create(properties) {\n return new B3DObject(properties);\n };\n\n /**\n * Encodes the specified B3DObject message. Does not implicitly {@link Binocular3DObject.B3DObject.verify|verify} messages.\n * @function encode\n * @memberof Binocular3DObject.B3DObject\n * @static\n * @param {Binocular3DObject.IB3DObject} message B3DObject message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n B3DObject.encode = function encode(message, writer) {\n if (!writer) writer = $Writer.create();\n if (message.name != null && Object.hasOwnProperty.call(message, 'name'))\n writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.name);\n if (message.isBSP != null && Object.hasOwnProperty.call(message, 'isBSP'))\n writer.uint32(/* id 2, wireType 0 =*/ 16).bool(message.isBSP);\n if (message.flare != null && Object.hasOwnProperty.call(message, 'flare'))\n writer.uint32(/* id 3, wireType 0 =*/ 24).sint32(message.flare);\n if (message.childlist != null && message.childlist.length)\n for (let i = 0; i < message.childlist.length; ++i)\n $root.Binocular3DObject.B3DObject.encode(\n message.childlist[i],\n writer.uint32(/* id 4, wireType 2 =*/ 34).fork()\n ).ldelim();\n if (message.vlist != null && message.vlist.length)\n for (let i = 0; i < message.vlist.length; ++i)\n $root.Binocular3DObject.B3DVertex.encode(\n message.vlist[i],\n writer.uint32(/* id 5, wireType 2 =*/ 42).fork()\n ).ldelim();\n if (message.tlist != null && message.tlist.length)\n for (let i = 0; i < message.tlist.length; ++i)\n $root.Binocular3DObject.B3DTriangle.encode(\n message.tlist[i],\n writer.uint32(/* id 6, wireType 2 =*/ 50).fork()\n ).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified B3DObject message, length delimited. Does not implicitly {@link Binocular3DObject.B3DObject.verify|verify} messages.\n * @function encodeDelimited\n * @memberof Binocular3DObject.B3DObject\n * @static\n * @param {Binocular3DObject.IB3DObject} message B3DObject message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n B3DObject.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a B3DObject message from the specified reader or buffer.\n * @function decode\n * @memberof Binocular3DObject.B3DObject\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {Binocular3DObject.B3DObject} B3DObject\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n B3DObject.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader)) reader = $Reader.create(reader);\n let end = length === undefined ? reader.len : reader.pos + length,\n message = new $root.Binocular3DObject.B3DObject();\n while (reader.pos < end) {\n let tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.name = reader.string();\n break;\n case 2:\n message.isBSP = reader.bool();\n break;\n case 3:\n message.flare = reader.sint32();\n break;\n case 4:\n if (!(message.childlist && message.childlist.length))\n message.childlist = [];\n message.childlist.push(\n $root.Binocular3DObject.B3DObject.decode(reader, reader.uint32())\n );\n break;\n case 5:\n if (!(message.vlist && message.vlist.length)) message.vlist = [];\n message.vlist.push(\n $root.Binocular3DObject.B3DVertex.decode(reader, reader.uint32())\n );\n break;\n case 6:\n if (!(message.tlist && message.tlist.length)) message.tlist = [];\n message.tlist.push(\n $root.Binocular3DObject.B3DTriangle.decode(\n reader,\n reader.uint32()\n )\n );\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a B3DObject message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof Binocular3DObject.B3DObject\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {Binocular3DObject.B3DObject} B3DObject\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n B3DObject.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader)) reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a B3DObject message.\n * @function verify\n * @memberof Binocular3DObject.B3DObject\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n B3DObject.verify = function verify(message) {\n if (typeof message !== 'object' || message === null)\n return 'object expected';\n if (message.name != null && message.hasOwnProperty('name'))\n if (!$util.isString(message.name)) return 'name: string expected';\n if (message.isBSP != null && message.hasOwnProperty('isBSP'))\n if (typeof message.isBSP !== 'boolean')\n return 'isBSP: boolean expected';\n if (message.flare != null && message.hasOwnProperty('flare'))\n if (!$util.isInteger(message.flare)) return 'flare: integer expected';\n if (message.childlist != null && message.hasOwnProperty('childlist')) {\n if (!Array.isArray(message.childlist))\n return 'childlist: array expected';\n for (let i = 0; i < message.childlist.length; ++i) {\n let error = $root.Binocular3DObject.B3DObject.verify(\n message.childlist[i]\n );\n if (error) return 'childlist.' + error;\n }\n }\n if (message.vlist != null && message.hasOwnProperty('vlist')) {\n if (!Array.isArray(message.vlist)) return 'vlist: array expected';\n for (let i = 0; i < message.vlist.length; ++i) {\n let error = $root.Binocular3DObject.B3DVertex.verify(\n message.vlist[i]\n );\n if (error) return 'vlist.' + error;\n }\n }\n if (message.tlist != null && message.hasOwnProperty('tlist')) {\n if (!Array.isArray(message.tlist)) return 'tlist: array expected';\n for (let i = 0; i < message.tlist.length; ++i) {\n let error = $root.Binocular3DObject.B3DTriangle.verify(\n message.tlist[i]\n );\n if (error) return 'tlist.' + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a B3DObject message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Binocular3DObject.B3DObject\n * @static\n * @param {Object.} object Plain object\n * @returns {Binocular3DObject.B3DObject} B3DObject\n */\n B3DObject.fromObject = function fromObject(object) {\n if (object instanceof $root.Binocular3DObject.B3DObject) return object;\n let message = new $root.Binocular3DObject.B3DObject();\n if (object.name != null) message.name = String(object.name);\n if (object.isBSP != null) message.isBSP = Boolean(object.isBSP);\n if (object.flare != null) message.flare = object.flare | 0;\n if (object.childlist) {\n if (!Array.isArray(object.childlist))\n throw TypeError(\n '.Binocular3DObject.B3DObject.childlist: array expected'\n );\n message.childlist = [];\n for (let i = 0; i < object.childlist.length; ++i) {\n if (typeof object.childlist[i] !== 'object')\n throw TypeError(\n '.Binocular3DObject.B3DObject.childlist: object expected'\n );\n message.childlist[i] = $root.Binocular3DObject.B3DObject.fromObject(\n object.childlist[i]\n );\n }\n }\n if (object.vlist) {\n if (!Array.isArray(object.vlist))\n throw TypeError('.Binocular3DObject.B3DObject.vlist: array expected');\n message.vlist = [];\n for (let i = 0; i < object.vlist.length; ++i) {\n if (typeof object.vlist[i] !== 'object')\n throw TypeError(\n '.Binocular3DObject.B3DObject.vlist: object expected'\n );\n message.vlist[i] = $root.Binocular3DObject.B3DVertex.fromObject(\n object.vlist[i]\n );\n }\n }\n if (object.tlist) {\n if (!Array.isArray(object.tlist))\n throw TypeError('.Binocular3DObject.B3DObject.tlist: array expected');\n message.tlist = [];\n for (let i = 0; i < object.tlist.length; ++i) {\n if (typeof object.tlist[i] !== 'object')\n throw TypeError(\n '.Binocular3DObject.B3DObject.tlist: object expected'\n );\n message.tlist[i] = $root.Binocular3DObject.B3DTriangle.fromObject(\n object.tlist[i]\n );\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a B3DObject message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Binocular3DObject.B3DObject\n * @static\n * @param {Binocular3DObject.B3DObject} message B3DObject\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n B3DObject.toObject = function toObject(message, options) {\n if (!options) options = {};\n let object = {};\n if (options.arrays || options.defaults) {\n object.childlist = [];\n object.vlist = [];\n object.tlist = [];\n }\n if (options.defaults) {\n object.name = 'NoName';\n object.isBSP = false;\n object.flare = 30;\n }\n if (message.name != null && message.hasOwnProperty('name'))\n object.name = message.name;\n if (message.isBSP != null && message.hasOwnProperty('isBSP'))\n object.isBSP = message.isBSP;\n if (message.flare != null && message.hasOwnProperty('flare'))\n object.flare = message.flare;\n if (message.childlist && message.childlist.length) {\n object.childlist = [];\n for (let j = 0; j < message.childlist.length; ++j)\n object.childlist[j] = $root.Binocular3DObject.B3DObject.toObject(\n message.childlist[j],\n options\n );\n }\n if (message.vlist && message.vlist.length) {\n object.vlist = [];\n for (let j = 0; j < message.vlist.length; ++j)\n object.vlist[j] = $root.Binocular3DObject.B3DVertex.toObject(\n message.vlist[j],\n options\n );\n }\n if (message.tlist && message.tlist.length) {\n object.tlist = [];\n for (let j = 0; j < message.tlist.length; ++j)\n object.tlist[j] = $root.Binocular3DObject.B3DTriangle.toObject(\n message.tlist[j],\n options\n );\n }\n return object;\n };\n\n /**\n * Converts this B3DObject to JSON.\n * @function toJSON\n * @memberof Binocular3DObject.B3DObject\n * @instance\n * @returns {Object.} JSON object\n */\n B3DObject.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return B3DObject;\n })();\n\n return Binocular3DObject;\n})());\n\nexport { $root as default };\n","import { BufferAttribute, Float32BufferAttribute } from 'three/src/core/BufferAttribute';\nimport { BufferGeometry } from 'three/src/core/BufferGeometry';\n\nimport { Binocular3DObject } from '../AssetManager/b3d/b3dbundle';\nexport class B3DHelper {\n public static load(b3dbuffer: Uint8Array): Binocular3DObject.B3DObject {\n return Binocular3DObject.B3DObject.decode(b3dbuffer);\n }\n\n public static getVerticesFromB3D(b3dObj: Binocular3DObject.B3DObject): Float32Array {\n const vertCount = b3dObj.vlist.length;\n const vertices = new Float32Array(vertCount * 3);\n for (let i = 0; i < vertCount; i++) {\n const v = b3dObj.vlist[i];\n vertices[i * 3 + 0] = v.x / 64.0;\n vertices[i * 3 + 1] = v.y / 64.0;\n vertices[i * 3 + 2] = v.z / 64.0;\n }\n\n return vertices;\n }\n\n public static getUVSFromB3D(b3dObj: Binocular3DObject.B3DObject): Float32Array {\n const vertCount = b3dObj.vlist.length;\n const uvs = new Float32Array(vertCount * 2);\n for (let i = 0; i < vertCount; i++) {\n const v = b3dObj.vlist[i];\n uvs[i * 2 + 0] = v.u / 2048.0;\n uvs[i * 2 + 1] = v.v / 2048.0;\n }\n\n return uvs;\n }\n\n public static getIndicesFromB3D(b3dObj: Binocular3DObject.B3DObject): Uint16Array {\n const triangleCount = b3dObj.tlist.length;\n const indexCount = triangleCount * 3;\n const indices = new Uint16Array(indexCount);\n for (let i = 0; i < triangleCount; i++) {\n const t = b3dObj.tlist[i];\n indices[i * 3 + 0] = t.A;\n indices[i * 3 + 1] = t.B;\n indices[i * 3 + 2] = t.C;\n }\n return indices;\n }\n\n public static getBufferGeometryFromTypedArray(b3dObj: Binocular3DObject.B3DObject): BufferGeometry {\n const vertices = B3DHelper.getVerticesFromB3D(b3dObj);\n const uvs = B3DHelper.getIndicesFromB3D(b3dObj);\n const indices = B3DHelper.getIndicesFromB3D(b3dObj);\n\n const geometry = new BufferGeometry();\n geometry.setIndex(new BufferAttribute(indices, 1));\n geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n return geometry;\n }\n}\n","import { Object3D } from 'three';\n\nexport enum VTOPackType {\n OBJ = 'OBJ',\n B3D = 'B3D',\n GLB = 'GLB'\n}\n\nexport enum VTOImageLoadType {\n TEXTURE = 'Texture',\n BLOB = 'Blob',\n BUFFER = 'Buffer',\n DATA_URI = 'Data'\n}\n\nexport interface IGlassesPackData {\n resource: string;\n upc?: string;\n packType: VTOPackType;\n status?: RenderStatus;\n mesh?: Object3D;\n}\n","import { GlassesB3DGeometry } from '../Geometry/GlassesB3DGeometry';\nimport { Texture } from 'three';\n\nexport class B3DFactory {\n /**\n *\n * @param b3dbuffer b3d serialized data\n * @returns geometry representation of the glasses, including BSP Tree\n */\n public static buildGlassesBspTree(b3dbuffer: ArrayBuffer, millimetersToMetersScalingFactor = false): GlassesB3DGeometry {\n return new GlassesB3DGeometry(new Uint8Array(b3dbuffer), false, millimetersToMetersScalingFactor);\n }\n}\n","import { FileLoader } from 'three/src/loaders/FileLoader';\nimport { LoadingManager } from 'three/src/loaders/LoadingManager';\nimport { Loader } from 'three/src/loaders/Loader';\n\nimport { Binocular3DObject } from '../../AssetManager/b3d/b3dbundle';\nimport { B3DHelper } from '../../Helpers/B3DHelper';\n\n/**\n * Useful to deserialize a B3D typed array\n */\nexport class B3DLoader extends Loader {\n constructor(manager?: LoadingManager) {\n super(manager);\n }\n\n loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise {\n return super.loadAsync(url, onProgress);\n }\n\n load(\n url: string,\n onLoad?: (camera: any) => Promise,\n onProgress?: (xhr: any) => void,\n onError?: (error: ErrorEvent) => void\n ): void {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType('uint8array');\n loader.load(\n url,\n (b3dData) => {\n if (onLoad != null) {\n onLoad(this.parse(b3dData as Uint8Array));\n }\n },\n onProgress,\n onError\n );\n }\n\n parse(b3dData: Uint8Array): Binocular3DObject.B3DObject {\n return B3DHelper.load(b3dData);\n }\n}\n","import { BufferGeometry } from 'three/src/core/BufferGeometry';\nimport { FileLoader } from 'three/src/loaders/FileLoader';\nimport { LoadingManager } from 'three/src/loaders/LoadingManager';\nimport { Loader } from 'three/src/loaders/Loader';\n\nimport { Binocular3DObject } from '../../AssetManager/b3d/b3dbundle';\nimport { B3DHelper } from '../../Helpers/B3DHelper';\n\n/**\n * useful to build a generic threeJS Mesh\n */\nexport class B3DGeometryLoader extends Loader {\n constructor(manager?: LoadingManager) {\n super(manager);\n }\n\n loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise {\n return super.loadAsync(url, onProgress);\n }\n\n load(\n url: string,\n onLoad?: (camera: any) => Promise,\n onProgress?: (xhr: any) => void,\n onError?: (error: ErrorEvent) => void\n ): void {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType('uint8array');\n loader.load(\n url,\n (b3dData) => {\n if (onLoad != null) {\n onLoad(this.parse(b3dData as Uint8Array));\n }\n },\n onProgress,\n onError\n );\n }\n\n parse(b3dData: Uint8Array): BufferGeometry {\n const b3dObj: Binocular3DObject.B3DObject = B3DHelper.load(b3dData);\n return B3DHelper.getBufferGeometryFromTypedArray(b3dObj);\n }\n}\n","import { FileLoader } from 'three/src/loaders/FileLoader';\nimport { LoadingManager } from 'three/src/loaders/LoadingManager';\nimport { Loader } from 'three/src/loaders/Loader';\n\nimport { GlassesB3DGeometry } from '../../Geometry/GlassesB3DGeometry';\n\n/**\n * Useful to build a B3DMesh\n */\nexport class B3DBSPGeometryLoader extends Loader {\n constructor(manager?: LoadingManager) {\n super(manager);\n }\n\n loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise {\n return super.loadAsync(url, onProgress);\n }\n\n load(\n url: string,\n enableDebug = true,\n onLoad?: (camera: any) => Promise,\n onProgress?: (xhr: any) => void,\n onError?: (error: ErrorEvent) => void\n ): void {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType('uint8array');\n loader.load(\n url,\n (b3dData) => {\n if (onLoad != null) {\n onLoad(this.parse(b3dData as Uint8Array, enableDebug));\n }\n },\n onProgress,\n onError\n );\n }\n\n parse(b3dData: Uint8Array, enableDebug = true): GlassesB3DGeometry {\n return new GlassesB3DGeometry(b3dData, enableDebug);\n }\n}\n","import { BufferGeometry } from 'three/src/core/BufferGeometry';\nimport { BufferAttribute, Float32BufferAttribute } from 'three/src/core/BufferAttribute';\n\nexport class HeadBinaryGeometry extends BufferGeometry {\n constructor(vertices: ArrayBuffer, uvs: ArrayBuffer, ibos: ArrayBuffer) {\n super();\n const vertexBuffer = new Float32Array(vertices);\n const uvsBuffer = this.parseHeadUVData(uvs);\n const ibosBuffer = new Uint16Array(ibos, 4);\n this.setAttribute('position', new Float32BufferAttribute(vertexBuffer, 3, false));\n this.setAttribute('uv', new Float32BufferAttribute(uvsBuffer, 2));\n this.setIndex(new BufferAttribute(ibosBuffer, 1));\n }\n\n private float16_to_float(h: any) {\n const s = (h & 0x8000) >> 15;\n const e = (h & 0x7c00) >> 10;\n const f = h & 0x03ff;\n\n if (e === 0) {\n return (s ? -1 : 1) * Math.pow(2, -14) * (f / Math.pow(2, 10));\n } else if (e === 0x1f) {\n return f ? NaN : (s ? -1 : 1) * Infinity;\n }\n return (s ? -1 : 1) * Math.pow(2, e - 15) * (1 + f / Math.pow(2, 10));\n }\n\n private parseHeadUVData(arraybuf: ArrayBuffer): Float32Array {\n // the contents of the headUVdata are an integer32 with the number of\n // vertices and then float16 data\n\n // the number of uv coordinates is different than the number of\n // points when using head-6.uvdata (24742 vs 24409 pts). Since we are\n // skipping loading the head-6.data file, we crop the headData.uv\n // matrix here.\n const headUVCount = new Int32Array(arraybuf, 0, 1); // should be 24742\n const headUV16f = new Uint16Array(arraybuf, 4);\n // check size is right\n if (2 * headUVCount[0] !== headUV16f.length) {\n throw new Error(\"head uv data count doesn't match actual data count\");\n }\n if (headUV16f.length < 2 * 24409) {\n throw new Error('too few vertices');\n }\n\n const croppedHeadUVCount = 24409;\n const headUVs = new Float32Array(croppedHeadUVCount * 2);\n for (let k = 0; k < 2 * croppedHeadUVCount; k++) {\n headUVs[k] = this.float16_to_float(headUV16f[k]);\n }\n return headUVs;\n }\n}\n","/* tslint:disable:comment-format no-bitwise*/\n/* eslint-disable @typescript-eslint/ban-ts-comment*/\n\nimport { IVMMultipassMaterial } from 'Materials/MaterialInterfaces';\nimport { BufferGeometry, Camera, Group, Material, Object3D, Scene } from 'three';\nimport { GlassesRTWebGLRenderer } from '@luxottica/glasses-rt-webglrenderer';\nimport { TypePass } from '../../Materials/MaterialInterfaces';\nimport { IScriptableRenderingPipeline, StandardMultipassSRPParameters } from './ScriptableRenderingPipelineInterfaces';\n\nexport interface IMirrorMultipassSRPParameters extends StandardMultipassSRPParameters {\n enableMirrorPass: boolean;\n}\n\nexport const defaultParams: IMirrorMultipassSRPParameters = {\n enableMirrorPass: true,\n stencilStart: 0,\n stencilEnd: 30,\n srpType: 'GLASSES_MULTIPASS_MATERIAL'\n};\n\nexport class GlassesB3DTransitionMirrorSRP implements IScriptableRenderingPipeline {\n protected renderer: GlassesRTWebGLRenderer;\n protected gl: WebGL2RenderingContext;\n protected parameters: IMirrorMultipassSRPParameters;\n\n public constructor(parameters: IMirrorMultipassSRPParameters) {\n // merge parameters from constructor with default parameters\n this.parameters = { ...defaultParams, ...parameters };\n }\n\n public setRenderer(renderer: GlassesRTWebGLRenderer): void {\n this.renderer = renderer;\n this.gl = renderer.getContext() as WebGL2RenderingContext;\n }\n\n public render(\n camera: Camera,\n scene: Scene,\n geometry: BufferGeometry,\n material: IVMMultipassMaterial,\n object: Object3D,\n group: Group\n ): void {\n const gl = this.gl;\n const renderer = this.renderer;\n\n gl.enable(gl.BLEND);\n gl.disable(gl.CULL_FACE);\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(gl.LEQUAL);\n gl.enable(gl.STENCIL_TEST);\n gl.stencilMask(0xff);\n gl.stencilOp(gl.INCR, gl.INCR, gl.INCR);\n\n const stencilStart = this.parameters.stencilStart;\n const stendilEnd = this.parameters.stencilEnd;\n\n for (let i = stencilStart; i < stendilEnd; i++) {\n gl.clear(gl.STENCIL_BUFFER_BIT);\n\n material.setPass({\n type: TypePass.MULT,\n stencil: i\n });\n\n renderer.renderBufferDirect(camera, scene, geometry, material, object, group);\n\n gl.clear(gl.STENCIL_BUFFER_BIT);\n\n material.setPass({\n type: TypePass.ADD,\n stencil: i\n });\n\n renderer.renderBufferDirect(camera, scene, geometry, material, object, group);\n }\n\n gl.disable(gl.STENCIL_TEST);\n\n // if enable mirror pass is enabled\n if (this.parameters.enableMirrorPass) {\n material.setPass({\n type: TypePass.MIRROR\n });\n\n renderer.renderBufferDirect(camera, scene, geometry, material, object, group);\n }\n\n gl.disable(gl.STENCIL_TEST);\n gl.disable(gl.BLEND);\n gl.disable(gl.CULL_FACE);\n gl.depthFunc(gl.LESS);\n }\n\n shouldRender(material: Material, object: Object3D): boolean {\n // using duck-typing because TS/JS does not have runtime interface check.\n\n // @ts-ignore\n return material.srpType === this.parameters.srpType;\n }\n\n setParameters(params: Partial): void {\n this.parameters = { ...this.parameters, ...params };\n }\n}\n","import { LinearEncoding, Matrix4, ShaderMaterial, sRGBEncoding, Texture, TextureEncoding, Uniform } from 'three';\n\nimport shadowVert from '../Shaders/head/head-standard-shadow.vert.glsl';\nimport shadowFrag from '../Shaders/head/head-standard-shadow.frag.glsl';\n\nimport { IHeadShadowMaterialParameters, IVMRendererCoreMaterial } from './MaterialInterfaces';\nimport { Vector2 } from 'three/src/math/Vector2';\nimport { Vector4 } from 'three/src/math/Vector4';\n\nexport enum VTOShadowBlendType {\n NONE,\n COLOR,\n TEXTURE\n}\n\nexport const shadowBgDefaultParameters: IHeadShadowMaterialParameters = {\n shadowMap: new Texture(),\n colorMap: new Texture(),\n debugColor: new Vector4(1, 1, 1, 0),\n showFitArea: false,\n debugZMultiplier: 0.01,\n cullYmin: 0,\n cullYmax: 0,\n headScale: 1,\n isVM: false,\n mvp: new Matrix4().identity(),\n texOffset: new Vector2(0, 0),\n shadowOffset: new Vector2(0, 0),\n noseOffset: 0,\n earOffset: 0,\n useColorMap: true,\n disableShadowCoordFlip: false,\n toneMapped: false,\n shaderMaterialParameters: {\n vertexShader: shadowVert,\n fragmentShader: shadowFrag,\n defines: {\n THREEJS_MATRICES: 0,\n SCREENSPACE_UV_X_FLIP: 0,\n USE_COLOR_MAP: 1,\n DISABLE_SHADOW_COORD_UV_Y_FLIP: 0\n }\n },\n scaleMultiplier: 1,\n zPosThreshold: 30,\n discardOverZPos: false\n};\n\n/**\n * Standard VM/VTO material for rendering the head (more precisely, the shadow of the glasses over the head)\n * It support both head rendering as solid mesh and hidden mesh (just shadow)\n */\nexport class HeadStandardShadowMaterial extends ShaderMaterial implements IVMRendererCoreMaterial {\n protected parameters: IHeadShadowMaterialParameters = shadowBgDefaultParameters;\n\n constructor(parameters?: IHeadShadowMaterialParameters) {\n super({\n ...shadowBgDefaultParameters.shaderMaterialParameters,\n ...(parameters ? parameters.shaderMaterialParameters : {})\n });\n\n const map = new Texture();\n map.encoding = LinearEncoding;\n // @ts-ignore\n this.map = map;\n\n // @ts-ignore\n this.mapEncoding = map.encoding;\n\n // need to disable blend operation\n this.transparent = false;\n this.parameters = { ...this.parameters, ...parameters };\n this.toneMapped = this.parameters.toneMapped;\n\n // @ts-ignore\n this.isRawShaderMaterial = false;\n this.initParameters();\n this.setParameters(parameters);\n }\n\n public disposeTexture(): void {\n this.uniforms.shadowMap.value.dispose();\n this.uniforms.colorMap.value.dispose();\n }\n\n private initParameters() {\n this.uniforms.colorMap = new Uniform(this.parameters.colorMap);\n this.uniforms.shadowMap = new Uniform(this.parameters.shadowMap);\n this.uniforms.headScale = new Uniform(this.parameters.headScale);\n this.uniforms.earOffset = new Uniform(this.parameters.earOffset);\n this.uniforms.noseOffset = new Uniform(this.parameters.noseOffset);\n this.uniforms.shOffset = new Uniform(this.parameters.shadowOffset);\n this.uniforms.texOffset = new Uniform(this.parameters.texOffset);\n this.uniforms.debugColor = new Uniform(this.parameters.debugColor);\n this.uniforms.mvp = new Uniform(this.parameters.mvp);\n this.uniforms.cullYmin = new Uniform(this.parameters.cullYmin);\n this.uniforms.cullYmax = new Uniform(this.parameters.cullYmax);\n this.uniforms.showFitArea = new Uniform(this.parameters.showFitArea);\n this.uniforms.debugZMultiplier = new Uniform(this.parameters.debugZMultiplier);\n this.uniforms.scaleMultiplier = new Uniform(this.parameters.scaleMultiplier);\n this.uniforms.zPosThreshold = new Uniform(this.parameters.zPosThreshold);\n }\n\n public setParameters(parameters?: IHeadShadowMaterialParameters): void {\n this.parameters = { ...this.parameters, ...parameters };\n\n this.uniforms.colorMap.value = this.parameters.colorMap;\n this.uniforms.shadowMap.value = this.parameters.shadowMap;\n this.uniforms.debugZMultiplier.value = this.parameters.debugZMultiplier;\n\n // legacy uniforms\n this.uniforms.headScale.value = this.parameters.headScale;\n this.uniforms.earOffset.value = this.parameters.earOffset;\n this.uniforms.noseOffset.value = this.parameters.noseOffset;\n this.uniforms.texOffset.value = this.parameters.texOffset;\n this.uniforms.shOffset.value = this.parameters.shadowOffset;\n this.uniforms.debugColor.value = this.parameters.debugColor;\n this.uniforms.mvp.value = this.parameters.mvp;\n this.uniforms.cullYmin.value = this.parameters.cullYmin;\n this.uniforms.cullYmax.value = this.parameters.cullYmax;\n this.uniforms.showFitArea.value = this.parameters.showFitArea;\n this.defines.THREEJS_MATRICES = this.parameters.useStandardMVPUniform ? 1 : 0;\n this.defines.SCREENSPACE_UV_X_FLIP = this.parameters.isVM ? 1 : 0;\n this.defines.USE_COLOR_MAP = this.parameters.useColorMap ? 1 : 0;\n this.defines.DISABLE_SHADOW_COORD_UV_Y_FLIP = this.parameters.disableShadowCoordFlip ? 1 : 0;\n\n this.defines.DISCARD_OVER_ZPOS = this.parameters.discardOverZPos ? 1 : 0;\n }\n\n getParameters(): IHeadShadowMaterialParameters {\n return this.parameters;\n }\n\n useStandardMVP(useStandard: boolean) {\n this.parameters.useStandardMVPUniform = useStandard;\n this.defines.THREEJS_MATRICES = useStandard ? 1 : 0;\n }\n\n useColorMap(useColorMap: boolean) {\n this.parameters.useColorMap = useColorMap;\n this.defines.USE_COLOR_MAP = useColorMap ? 1 : 0;\n }\n\n useDiscardOverZPos(discardOverZPos: boolean, scaleMultiplier: number, zPosThreshold: number) {\n this.parameters.discardOverZPos = discardOverZPos;\n this.defines.DISCARD_OVER_ZPOS = discardOverZPos ? 1 : 0;\n\n this.parameters.scaleMultiplier = scaleMultiplier;\n this.uniforms.scaleMultiplier.value = scaleMultiplier;\n\n this.parameters.zPosThreshold = zPosThreshold;\n this.uniforms.zPosThreshold.value = zPosThreshold;\n }\n}\n","/* tslint:disable:comment-format no-bitwise*/\n/* eslint-disable @typescript-eslint/ban-ts-comment*/\n\nimport { IVMMultipassMaterial } from 'Materials/MaterialInterfaces';\nimport { BufferGeometry, Camera, Group, Material, Object3D, Scene } from 'three';\nimport { GlassesRTWebGLRenderer } from '@luxottica/glasses-rt-webglrenderer';\nimport { TypePass } from '../../Materials/MaterialInterfaces';\nimport { IScriptableRenderingPipeline, StandardMultipassSRPParameters } from './ScriptableRenderingPipelineInterfaces';\n\nexport interface ILensesMirrorMultipassSRPParameters {\n enableMirrorPass: boolean;\n}\n\nexport const defaultParams: ILensesMirrorMultipassSRPParameters = {\n enableMirrorPass: true\n};\n\nexport class LensStandardTransitionMirrorSRP implements IScriptableRenderingPipeline {\n protected renderer: GlassesRTWebGLRenderer;\n protected gl: WebGL2RenderingContext;\n protected parameters: ILensesMirrorMultipassSRPParameters;\n\n public constructor(parameters: ILensesMirrorMultipassSRPParameters) {\n // merge parameters from constructor with default parameters\n this.parameters = { ...defaultParams, ...parameters };\n }\n\n public setRenderer(renderer: GlassesRTWebGLRenderer): void {\n this.renderer = renderer;\n this.gl = renderer.getContext() as WebGL2RenderingContext;\n }\n\n public render(\n camera: Camera,\n scene: Scene,\n geometry: BufferGeometry,\n material: IVMMultipassMaterial,\n object: Object3D,\n group: Group\n ): void {\n const renderer = this.renderer;\n\n material.setPass({\n type: TypePass.MULT\n });\n\n renderer.renderBufferDirect(camera, scene, geometry, material, object, group);\n\n material.setPass({\n type: TypePass.ADD\n });\n\n renderer.renderBufferDirect(camera, scene, geometry, material, object, group);\n\n material.setPass({\n type: TypePass.MULT\n });\n\n renderer.renderBufferDirect(camera, scene, geometry, material, object, group);\n\n material.setPass({\n type: TypePass.ADD\n });\n\n renderer.renderBufferDirect(camera, scene, geometry, material, object, group);\n\n // if enable mirror pass is enabled\n if (this.parameters.enableMirrorPass) {\n material.setPass({\n type: TypePass.MIRROR\n });\n\n renderer.renderBufferDirect(camera, scene, geometry, material, object, group);\n }\n }\n\n shouldRender(material: Material, object: Object3D): boolean {\n // using duck-typing because TS/JS does not have runtime interface check.\n\n // @ts-ignore\n return material.srpType === 'LENS_MIRROR_MATERIAL';\n }\n\n setParameters(params: Partial): void {\n this.parameters = { ...this.parameters, ...params };\n }\n}\n","import {\n AddEquation,\n CubeTexture,\n Euler,\n OneFactor,\n OneMinusSrcAlphaFactor,\n ShaderMaterial,\n ShaderMaterialParameters,\n Texture,\n Uniform,\n Vector3\n} from 'three';\nimport { Matrix4 } from 'three/src/math/Matrix4';\n\nimport vert from '../Shaders/lenses/lens-standard-iridescent.vert.glsl';\nimport frag from '../Shaders/lenses/lens-standard-iridescent.frag.glsl';\nimport { ILensesIridescentMaterialParameters, IMultiMVPSupport, IVMRendererCoreMaterial } from './MaterialInterfaces';\n\nconst basicMaterialDefault: ILensesIridescentMaterialParameters = {\n vertexShader: vert,\n fragmentShader: frag,\n envMap: new CubeTexture(),\n map: new CubeTexture(),\n color: new Vector3(1, 1, 1),\n opacity: 1,\n mapY: 0,\n mapX: 0,\n mapZ: 0,\n sensitivity: 0.5,\n intensity: 1.0\n};\n\nexport class LensStandardIridescentMaterial extends ShaderMaterial {\n private parameters: ILensesIridescentMaterialParameters = basicMaterialDefault;\n\n constructor(parameters?: ILensesIridescentMaterialParameters) {\n super({\n ...basicMaterialDefault,\n ...parameters,\n transparent: true\n });\n\n this.parameters = { ...basicMaterialDefault, ...parameters };\n this.initParameters();\n this.setParameters(parameters);\n }\n\n public copy(other: LensStandardIridescentMaterial) {\n super.copy(other);\n this.setParameters(other.getParameters());\n this.type = other.type;\n return this;\n }\n\n private initParameters() {\n this.defines = { LENS_SRGB: 1 };\n this.uniforms.glassesYaw = new Uniform(0.0);\n this.uniforms.glassesPitch = new Uniform(0.0);\n this.uniforms.envMap = new Uniform(basicMaterialDefault.envMap);\n this.uniforms.map = new Uniform(basicMaterialDefault.map);\n this.uniforms.opacity = new Uniform(basicMaterialDefault.opacity);\n this.uniforms.mapX = new Uniform(basicMaterialDefault.mapX);\n this.uniforms.mapY = new Uniform(basicMaterialDefault.mapY);\n this.uniforms.mapZ = new Uniform(basicMaterialDefault.mapZ);\n this.uniforms.sensitivity = new Uniform(basicMaterialDefault.sensitivity);\n this.uniforms.intensity = new Uniform(basicMaterialDefault.intensity);\n this.uniformsNeedUpdate = true;\n }\n\n public disposeTexture(): void {\n this.uniforms.envMap.value.dispose();\n this.uniforms.map.value.dispose();\n }\n\n public updatesGlassesOrientation(euler: Euler): void {\n this.uniforms.glassesYaw.value = euler.y;\n this.uniforms.glassesPitch.value = euler.x;\n }\n\n setLinearTosRGB(value: boolean): void {\n this.defines = { LENS_SRGB: value ? 1 : 0 };\n this.needsUpdate = true;\n }\n\n public setParameters(parameters?: ILensesIridescentMaterialParameters): void {\n this.parameters = { ...this.parameters, ...parameters };\n this.uniforms.envMap.value = this.parameters.envMap;\n this.uniforms.map.value = this.parameters.map;\n this.uniforms.opacity.value = this.parameters.opacity;\n this.uniforms.mapX.value = this.parameters.mapX;\n this.uniforms.mapY.value = this.parameters.mapY;\n this.uniforms.mapZ.value = this.parameters.mapZ;\n this.uniforms.sensitivity.value = this.parameters.sensitivity;\n this.uniforms.intensity.value = this.parameters.intensity;\n }\n\n getParameters(): ILensesIridescentMaterialParameters {\n return this.parameters;\n }\n}\n","import {\n AddEquation,\n Color,\n CubeTexture,\n CustomBlending,\n DoubleSide,\n EqualStencilFunc,\n FrontSide,\n IncrementStencilOp,\n LessEqualDepth,\n Matrix3,\n NormalBlending,\n OneFactor,\n OneMinusSrcAlphaFactor,\n ShaderMaterial,\n SrcAlphaFactor,\n SrcColorFactor,\n Uniform,\n ZeroFactor\n} from 'three';\n\nimport {\n ILensesMirrorMultipassMaterialParameters,\n IVMMultipassMaterial,\n IVMRendererCoreMaterial,\n TypePass,\n VTOPassOpts\n} from './MaterialInterfaces';\n\nimport vert from '../Shaders/lenses/lens-standard-transition-mirror.vert.glsl';\nimport frag from '../Shaders/lenses/lens-standard-transition-mirror.frag.glsl';\n\nexport interface ILensesMirrorMaterialDefines {\n TRANSITION_LEGACY: number;\n LENS_LINEAR: number;\n}\n\n/**\n * Default Parameters\n */\nexport const transitionLensesMaterialDefaultOpts: ILensesMirrorMultipassMaterialParameters = {\n envMap: new CubeTexture(),\n transmissionCorrectionFactor: 0,\n blendMode: 0,\n shaderMaterialParameters: {\n vertexShader: vert,\n fragmentShader: frag,\n defines: {\n TRANSITION_LEGACY: 1,\n LENS_LINEAR: 0\n }\n },\n lensCoatingSpecularity: 1,\n reflectionVecMat: new Matrix3(),\n envMapIntensity: 0.35,\n lensCoatingSpecularColor: new Color(0.8, 0.8, 0.8),\n lensTransmission: new Color(1, 1, 1)\n};\n\n/**\n * Definitive Virtual Mirror Material for Glasses, using multi-pass approach (RenderJ Style Renderer)\n */\nexport class LensStandardTransitionMirrorMaterial extends ShaderMaterial implements IVMRendererCoreMaterial, IVMMultipassMaterial {\n /**\n * Parameters for material, mainly uniforms and define options\n */\n private parameters: ILensesMirrorMultipassMaterialParameters = transitionLensesMaterialDefaultOpts;\n public srpType = 'LENS_MIRROR_MATERIAL';\n\n /**\n * General option for\n */\n private opts: VTOPassOpts = {\n type: TypePass.MULT,\n stencil: 0\n };\n\n constructor(opts?: VTOPassOpts, parameters?: ILensesMirrorMultipassMaterialParameters) {\n // merge default options with passed parameters\n super({\n ...transitionLensesMaterialDefaultOpts.shaderMaterialParameters,\n ...(parameters ? parameters.shaderMaterialParameters : {})\n });\n\n // init uniforms\n this.initParameters();\n\n // configure material (fixed pipeline funcs)\n this.setPass(opts);\n\n //\n this.setParameters(parameters);\n }\n\n public initParameters(): void {\n for (const key in transitionLensesMaterialDefaultOpts) {\n this.uniforms[key] = new Uniform(transitionLensesMaterialDefaultOpts[key]);\n }\n }\n\n public setParameters(parameters?: ILensesMirrorMultipassMaterialParameters): void {\n this.parameters = { ...this.parameters, ...parameters };\n // mirror parameters\n this.uniforms.lensCoatingSpecularity.value = this.parameters.lensCoatingSpecularity;\n\n this.uniforms.envMapIntensity.value = this.parameters.envMapIntensity;\n\n this.uniforms.lensCoatingSpecularColor.value = this.parameters.lensCoatingSpecularColor;\n this.uniforms.reflectionVecMat.value = this.parameters.reflectionVecMat;\n\n this.uniforms.lensTransmission.value = this.parameters.lensTransmission;\n this.uniforms.transmissionCorrectionFactor.value = this.parameters.transmissionCorrectionFactor;\n this.uniforms.blendMode.value = this.parameters.blendMode;\n this.uniforms.envMap.value = this.parameters.envMap;\n }\n\n /**\n * Allow to switch between multiplication pass and the additive pass mode\n * The mode set both fixed pipeline parameters (blending function) and a uniform to trigger the correct mode inside the shader\n * @param opts\n */\n public setPass(opts: VTOPassOpts): void {\n this.opts = { ...this.opts, ...opts };\n\n this.stencilRef = this.opts.stencil;\n let blendMode: number;\n\n this.transparent = true;\n\n // add blending function (src + dst)\n this.blending = CustomBlending;\n this.blendEquation = AddEquation;\n this.blendEquationAlpha = AddEquation;\n\n //this.depthWrite = true;\n this.depthTest = true;\n this.depthFunc = LessEqualDepth;\n\n this.side = FrontSide;\n\n switch (this.opts.type) {\n case TypePass.MULT:\n this.blendSrc = ZeroFactor;\n this.blendDst = SrcColorFactor;\n this.blendSrcAlpha = OneFactor;\n this.blendDstAlpha = ZeroFactor;\n blendMode = 0;\n break;\n case TypePass.ADD:\n this.blendSrc = OneFactor;\n this.blendDst = OneFactor;\n this.blendSrcAlpha = OneFactor;\n this.blendDstAlpha = ZeroFactor;\n blendMode = 1;\n break;\n case TypePass.MIRROR:\n // alpha blending (srcCol*alpha + dstCol*(1. - alpha)), (srcAlpha*1 + dstAlpha*0)\n this.blending = NormalBlending;\n\n this.depthTest = true;\n this.depthWrite = false;\n\n // disable stencil with a workaround\n this.stencilFunc = undefined;\n this.stencilWrite = false;\n this.stencilFuncMask = undefined;\n\n // setpass mode inside shader\n blendMode = 2;\n break;\n }\n\n this.uniforms.blendMode = new Uniform(blendMode);\n this.uniformsNeedUpdate = true;\n }\n\n public getParameters(): ILensesMirrorMultipassMaterialParameters {\n return this.parameters;\n }\n\n /**\n * Allows to set all shader defines using an ad hoc interface\n * @param newDefines\n */\n public setDefines(newDefines: Partial): void {\n this.parameters.shaderMaterialParameters.defines = { ...this.parameters.shaderMaterialParameters.defines, ...newDefines };\n\n for (const def in newDefines) {\n if (newDefines.hasOwnProperty(def)) this.defines[def] = newDefines[def];\n }\n }\n}\n","import {\n AddEquation,\n Color,\n CubeTexture,\n CustomBlending,\n DoubleSide,\n EqualStencilFunc,\n FrontSide,\n IncrementStencilOp,\n LessEqualDepth,\n Matrix3,\n NormalBlending,\n OneFactor,\n OneMinusSrcAlphaFactor,\n ShaderMaterial,\n SrcAlphaFactor,\n SrcColorFactor,\n Uniform,\n ZeroFactor\n} from 'three';\n\nimport {\n ILensesGradientMultipassMaterialParameters,\n IVMMultipassMaterial,\n IVMRendererCoreMaterial,\n TypePass,\n VTOPassOpts\n} from './MaterialInterfaces';\n\nimport vert from '../Shaders/lenses/lens-standard-gradient.vert.glsl';\nimport frag from '../Shaders/lenses/lens-standard-gradient.frag.glsl';\n\nexport interface ILensesGradientMaterialDefines {\n LENS_LINEAR: number;\n GRADIENT_VALUES: number;\n}\n\n/**\n * Default Parameters\n */\nexport const gradientLensesMaterialDefaultOpts: ILensesGradientMultipassMaterialParameters = {\n envMap: new CubeTexture(),\n blendMode: 0,\n shaderMaterialParameters: {\n vertexShader: vert,\n fragmentShader: frag,\n defines: {\n LENS_LINEAR: 0,\n HIDE_LENSES: 0,\n HIDE_FRAME: 0\n }\n },\n lensCoatingSpecularity: [1, 1],\n reflectionVecMat: new Matrix3(),\n envMapIntensity: 0.35,\n lensCoatingSpecularColor: [new Color(0.8, 0.8, 0.8), new Color(0.8, 0.8, 0.8)],\n lensTransmission: [new Color(0.5, 0.5, 0.5), new Color(1, 1, 1)],\n heightOnLensInterpolationFactor: [0, 1],\n lensMinY: -1,\n lensMaxY: 1\n};\n\n/**\n * Definitive Virtual Mirror Material for Glasses, using multi-pass approach (RenderJ Style Renderer)\n */\nexport class LensStandardGradientMaterial extends ShaderMaterial implements IVMRendererCoreMaterial, IVMMultipassMaterial {\n /**\n * Parameters for material, mainly uniforms and define options\n */\n private parameters: ILensesGradientMultipassMaterialParameters = gradientLensesMaterialDefaultOpts;\n public srpType = 'LENS_MIRROR_MATERIAL';\n\n /**\n * General option for\n */\n private opts: VTOPassOpts = {\n type: TypePass.MULT,\n stencil: 0\n };\n\n constructor(opts?: VTOPassOpts, parameters?: ILensesGradientMultipassMaterialParameters) {\n // merge default options with passed parameters\n super({\n ...gradientLensesMaterialDefaultOpts.shaderMaterialParameters,\n ...(parameters ? parameters.shaderMaterialParameters : {})\n });\n\n // init uniforms\n this.initParameters();\n\n // configure material (fixed pipeline funcs)\n this.setPass(opts);\n\n //\n this.setParameters(parameters);\n }\n\n public initParameters(): void {\n for (const key in gradientLensesMaterialDefaultOpts) {\n this.uniforms[key] = new Uniform(gradientLensesMaterialDefaultOpts[key]);\n }\n }\n\n public setParameters(parameters?: ILensesGradientMultipassMaterialParameters): void {\n this.parameters = { ...this.parameters, ...parameters };\n\n this.uniforms.lensCoatingSpecularColor.value = this.parameters.lensCoatingSpecularColor;\n this.uniforms.reflectionVecMat.value = this.parameters.reflectionVecMat;\n this.uniforms.envMapIntensity.value = this.parameters.envMapIntensity;\n this.uniforms.lensCoatingSpecularity.value = this.parameters.lensCoatingSpecularity;\n\n this.uniforms.lensTransmission.value = this.parameters.lensTransmission;\n this.uniforms.heightOnLensInterpolationFactor.value = this.parameters.heightOnLensInterpolationFactor;\n this.uniforms.blendMode.value = this.parameters.blendMode;\n this.uniforms.envMap.value = this.parameters.envMap;\n this.uniforms.lensMinY.value = this.parameters.lensMinY;\n this.uniforms.lensMaxY.value = this.parameters.lensMaxY;\n\n if (this.defines.GRADIENT_VALUES !== this.parameters.heightOnLensInterpolationFactor.length) {\n this.needsUpdate = true; // we need to recompile the material\n }\n this.setDefines({ GRADIENT_VALUES: this.parameters.heightOnLensInterpolationFactor.length });\n }\n\n /**\n * Allow to switch between multiplication pass and the additive pass mode\n * The mode set both fixed pipeline parameters (blending function) and a uniform to trigger the correct mode inside the shader\n * @param opts\n */\n public setPass(opts: VTOPassOpts): void {\n this.opts = { ...this.opts, ...opts };\n\n this.stencilRef = this.opts.stencil;\n let blendMode: number;\n\n this.transparent = true;\n\n // add blending function (src + dst)\n this.blending = CustomBlending;\n this.blendEquation = AddEquation;\n this.blendEquationAlpha = AddEquation;\n\n //this.depthWrite = true;\n this.depthTest = true;\n this.depthFunc = LessEqualDepth;\n\n this.side = FrontSide;\n\n switch (this.opts.type) {\n case TypePass.MULT:\n this.blendSrc = ZeroFactor;\n this.blendDst = SrcColorFactor;\n this.blendSrcAlpha = OneFactor;\n this.blendDstAlpha = ZeroFactor;\n blendMode = 0;\n break;\n case TypePass.ADD:\n this.blendSrc = OneFactor;\n this.blendDst = OneFactor;\n this.blendSrcAlpha = OneFactor;\n this.blendDstAlpha = ZeroFactor;\n blendMode = 1;\n break;\n case TypePass.MIRROR:\n // alpha blending (srcCol*alpha + dstCol*(1. - alpha)), (srcAlpha*1 + dstAlpha*0)\n this.blending = NormalBlending;\n\n this.depthTest = true;\n this.depthWrite = false;\n\n // disable stencil with a workaround\n this.stencilFunc = undefined;\n this.stencilWrite = false;\n this.stencilFuncMask = undefined;\n\n // setpass mode inside shader\n blendMode = 2;\n break;\n }\n\n this.uniforms.blendMode = new Uniform(blendMode);\n this.uniformsNeedUpdate = true;\n }\n\n public getParameters(): ILensesGradientMultipassMaterialParameters {\n return this.parameters;\n }\n\n /**\n * Allows to set all shader defines using an ad hoc interface\n * @param newDefines\n */\n public setDefines(newDefines: Partial): void {\n this.parameters.shaderMaterialParameters.defines = { ...this.parameters.shaderMaterialParameters.defines, ...newDefines };\n\n for (const def in newDefines) {\n if (newDefines.hasOwnProperty(def)) this.defines[def] = newDefines[def];\n }\n }\n}\n","import { AddEquation, OneFactor, OneMinusSrcAlphaFactor, RawShaderMaterial, ShaderMaterialParameters, Texture, Uniform } from 'three';\nimport { Matrix4 } from 'three/src/math/Matrix4';\n\nimport sampleVert from '../Shaders/depth/depth.vert.glsl';\nimport sampleFrag from '../Shaders/depth/depth.frag.glsl';\nimport {\n IHeatmapParameters,\n IMultiMVPSupport,\n IVMMultipassMaterial,\n IVMRendererCoreMaterial,\n VTOBasicMaterialParameters\n} from './MaterialInterfaces';\n\nconst defaultHeatmapParameters: IHeatmapParameters = {\n cutoffMin: 0,\n cutoffMax: 1,\n worldToRestMatrix: new Matrix4().identity(),\n shaderMaterialParameters: {\n defines: {\n THREEJS_MATRICES: 1\n },\n vertexShader: sampleVert,\n fragmentShader: sampleFrag\n }\n};\n\nexport class HeatmapMaterial extends RawShaderMaterial implements IVMRendererCoreMaterial, IMultiMVPSupport {\n private parameters: IHeatmapParameters;\n\n constructor(parameters?: IHeatmapParameters) {\n super({ ...defaultHeatmapParameters.shaderMaterialParameters, ...(parameters ? parameters.shaderMaterialParameters : {}) });\n this.parameters = { ...this.parameters, ...parameters };\n this.initParameters();\n }\n\n private initParameters() {\n this.uniforms.cutoffMin = new Uniform(this.parameters.cutoffMin);\n this.uniforms.cutoffMax = new Uniform(this.parameters.cutoffMax);\n this.uniforms.worldToRestMatrix = new Uniform(this.parameters.worldToRestMatrix);\n }\n\n public setParameters(parameters?: IHeatmapParameters): void {\n this.parameters = { ...this.parameters, ...parameters };\n this.uniforms.cutoffMin.value = this.parameters.cutoffMin;\n this.uniforms.cutoffMax.value = this.parameters.cutoffMax;\n this.uniforms.worldToRestMatrix.value = this.parameters.worldToRestMatrix;\n }\n\n getParameters(): IHeatmapParameters {\n return this.parameters;\n }\n\n public useStandardMVP(useStandard: boolean) {\n this.parameters.useStandardMVPUniform = useStandard;\n this.defines.THREEJS = useStandard ? 1 : 0;\n }\n}\n","import { Material } from 'three';\n\nexport interface ShaderReplacement {\n chunk: string;\n replace: string;\n onVertex: boolean;\n onFragment: boolean;\n}\n\nexport class ShaderChunkReplacer {\n protected material: Material;\n protected replacements: ShaderReplacement[];\n protected uniforms: any;\n\n constructor(material: Material) {\n this.material = material;\n this.replacements = [];\n this.uniforms = {};\n }\n\n public setMaterial(material: Material) {\n this.material = material;\n }\n\n public reset() {\n this.uniforms = {};\n this.replacements = [];\n }\n\n public addReplace(replacement: ShaderReplacement) {\n this.replacements.push(replacement);\n return this;\n }\n\n public replaceAfter(replacement: ShaderReplacement) {\n const replace = replacement.chunk + '\\n' + replacement.replace;\n replacement.replace = replace;\n this.addReplace(replacement);\n return this;\n }\n\n public replaceBefore(replacement: ShaderReplacement) {\n const replace = replacement.replace + '\\n' + replacement.chunk;\n replacement.replace = replace;\n this.addReplace(replacement);\n return this;\n }\n\n public updateUniforms(uniforms?: any) {\n this.uniforms = {\n ...this.uniforms,\n ...uniforms\n };\n }\n\n public compile(): Material {\n const material = this.material;\n\n this.material.onBeforeCompile = (shader) => {\n shader.uniforms = {\n ...shader.uniforms,\n ...this.uniforms\n };\n\n this.replacements.forEach((replacement) => {\n if (replacement.onVertex) {\n shader.vertexShader = shader.vertexShader.replace(replacement.chunk, replacement.replace);\n }\n\n if (replacement.onFragment) {\n shader.fragmentShader = shader.fragmentShader.replace(replacement.chunk, replacement.replace);\n }\n });\n\n material.userData.shader = shader;\n };\n\n return this.material;\n }\n}\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../../package.json';\n\nexport function getLogger(className: string) {\n return RemoteLogConfig.getInstance().getLoggerInfo(name, version, className);\n}\n","import { Material } from 'three/src/materials/Material';\nimport { MeshStandardMaterial, Shader, Uniform } from 'three';\nimport { ShaderChunkReplacer } from './ShaderChunkReplacer';\nimport { IFadeUniforms, ITaperUniforms } from '../MaterialInterfaces';\nimport { getLogger } from 'Services/LoggingService';\nimport { Matrix4 } from 'three/src/math/Matrix4';\n\nexport class FeatureMaterialBuilder {\n protected replacer: ShaderChunkReplacer;\n protected material: Material;\n\n constructor(material?: Material) {\n this.replacer = new ShaderChunkReplacer(material);\n this.material = material;\n }\n\n public setMaterial(material: Material, resetState = true) {\n this.material = material;\n if (resetState) this.replacer.reset();\n this.replacer.setMaterial(material);\n }\n\n public addBending(\n bendAmount?: number,\n bendDistance?: number,\n worldToRestMatrix?: Matrix4,\n invWorldToRestMatrix?: Matrix4\n ): FeatureMaterialBuilder {\n const replacer = this.replacer;\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: true,\n onFragment: false\n });\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: true,\n onFragment: false\n });\n\n const uniforms = {\n bendDistance: new Uniform(bendDistance !== undefined ? bendDistance : 1),\n bendAmount: new Uniform(bendAmount !== undefined ? bendAmount : 1),\n worldToRestMatrix: new Uniform(worldToRestMatrix !== undefined ? worldToRestMatrix : new Matrix4()),\n invWorldToRestMatrix: new Uniform(invWorldToRestMatrix !== undefined ? invWorldToRestMatrix : new Matrix4())\n };\n\n replacer.updateUniforms(uniforms);\n\n return this;\n }\n\n public addTapering(parameters?: ITaperUniforms): FeatureMaterialBuilder {\n const replacer = this.replacer;\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: true,\n onFragment: false\n });\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: true,\n onFragment: false\n });\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: true,\n onFragment: false\n });\n\n const uniforms = {\n flare: new Uniform(parameters.flare !== undefined ? parameters.flare : 1),\n taper: new Uniform(parameters.taper !== undefined ? parameters.taper : 1),\n unitScaleFactor: new Uniform(parameters.unitScaleFactor !== undefined ? parameters.unitScaleFactor : 1),\n sideInFront: new Uniform(parameters.sideInFront !== undefined ? parameters.sideInFront : 1),\n scale: new Uniform(parameters.scale !== undefined ? parameters.scale : 1),\n worldToRestMatrix: new Uniform(parameters.worldToRestMatrix !== undefined ? parameters.worldToRestMatrix : new Matrix4()),\n invWorldToRestMatrix: new Uniform(parameters.invWorldToRestMatrix !== undefined ? parameters.invWorldToRestMatrix : new Matrix4())\n };\n\n replacer.updateUniforms(uniforms);\n\n return this;\n }\n\n public addFading(parameters?: IFadeUniforms): FeatureMaterialBuilder {\n const replacer = this.replacer;\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: true,\n onFragment: true\n });\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: true,\n onFragment: false\n });\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: false,\n onFragment: true\n });\n\n const uniforms = {\n enableFade: new Uniform(parameters.enableFade !== undefined ? parameters.enableFade : true),\n fadePositionZ: new Uniform(parameters.fadePositionZ !== undefined ? parameters.fadePositionZ : 0),\n unitScaleFactor: new Uniform(parameters.unitScaleFactor !== undefined ? parameters.unitScaleFactor : 1),\n worldToRestMatrix: new Uniform(parameters.worldToRestMatrix !== undefined ? parameters.worldToRestMatrix : new Matrix4())\n };\n\n replacer.updateUniforms(uniforms);\n\n return this;\n }\n\n public addDitheringFading(parameters?: IFadeUniforms): FeatureMaterialBuilder {\n const replacer = this.replacer;\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: true,\n onFragment: true\n });\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: true,\n onFragment: false\n });\n\n replacer.addReplace({\n chunk: '#include ',\n replace: '#include ' + '\\n' + '#include ' + '\\n',\n onVertex: false,\n onFragment: true\n });\n\n const uniforms = {\n //0 for bayern - 1 for white noise\n ditheringDistribution: new Uniform(parameters.ditheringDistribution !== undefined ? parameters.ditheringDistribution : 0),\n enableFade: new Uniform(parameters.enableFade !== undefined ? parameters.enableFade : true),\n fadePositionZ: new Uniform(parameters.fadePositionZ !== undefined ? parameters.fadePositionZ : 0),\n unitScaleFactor: new Uniform(parameters.unitScaleFactor !== undefined ? parameters.unitScaleFactor : 1),\n worldToRestMatrix: new Uniform(parameters.worldToRestMatrix !== undefined ? parameters.worldToRestMatrix : new Matrix4())\n };\n\n replacer.updateUniforms(uniforms);\n\n return this;\n }\n\n public compileMaterial(): MeshStandardMaterial {\n return this.replacer.compile() as MeshStandardMaterial;\n }\n\n public setBendingUniforms(bendAmount?: number, bendDistance?: number, worldToRestMatrix?: Matrix4, invWorldToRestMatrix?: Matrix4): void {\n if (this.material.userData.shader === undefined) {\n getLogger('FeatureMaterialBuilder').warn('No shader userData found. Use MaterialBuilder first');\n return;\n }\n\n const shader: Shader = this.material.userData.shader;\n if (bendAmount) shader.uniforms.bendAmount.value = bendAmount;\n if (bendDistance) shader.uniforms.bendDistance.value = bendDistance;\n if (worldToRestMatrix) shader.uniforms.worldToRestMatrix.value = worldToRestMatrix;\n if (invWorldToRestMatrix) shader.uniforms.invWorldToRestMatrix.value = invWorldToRestMatrix;\n }\n\n public setTaperUniforms(uniforms: ITaperUniforms): void {\n if (this.material.userData.shader === undefined) {\n getLogger('FeatureMaterialBuilder').warn('No shader userData found. Use MaterialBuilder first');\n return;\n }\n\n const shader: Shader = this.material.userData.shader;\n if (uniforms.flare) shader.uniforms.flare.value = uniforms.flare;\n if (uniforms.taper) shader.uniforms.taper.value = uniforms.taper;\n if (uniforms.unitScaleFactor) shader.uniforms.unitScaleFactor.value = uniforms.unitScaleFactor;\n if (uniforms.worldToRestMatrix) shader.uniforms.worldToRestMatrix.value = uniforms.worldToRestMatrix;\n if (uniforms.invWorldToRestMatrix) shader.uniforms.invWorldToRestMatrix.value = uniforms.invWorldToRestMatrix;\n }\n\n public setFadeUniforms(uniforms: IFadeUniforms): void {\n if (this.material.userData.shader === undefined) {\n getLogger('FeatureMaterialBuilder').warn('No shader userData found. Use MaterialBuilder first');\n return;\n }\n\n const shader: Shader = this.material.userData.shader;\n if (uniforms.enableFade) shader.uniforms.enableFade.value = uniforms.enableFade;\n if (uniforms.fadePositionZ) shader.uniforms.fadePositionZ.value = uniforms.fadePositionZ;\n if (uniforms.unitScaleFactor) shader.uniforms.unitScaleFactor.value = uniforms.unitScaleFactor;\n if (uniforms.worldToRestMatrix) shader.uniforms.worldToRestMatrix.value = uniforms.worldToRestMatrix;\n }\n}\n","// Random integer from interval\nimport { MathUtils, Color, Vector3 } from 'three';\n\nexport function randInt(low: number, high: number): number {\n return low + Math.floor(Math.random() * (high - low + 1));\n}\n\n// Javascript mod fix\nexport function mod(n: number, m: number): number {\n return ((n % m) + m) % m;\n}\n\nexport function computeYRotation(pose: number, maxDegreeRotation: number, maxViews: number): number {\n const angles = maxDegreeRotation; // (-theta, theta);\n const angleDegree = (maxDegreeRotation * 2) / (maxViews - 1);\n const radians = (angles - pose * angleDegree) * MathUtils.DEG2RAD;\n\n return radians;\n}\n\nexport function applyTransmissionCorrection(color: Color, transmissionCorrectionFactor: number): Color {\n const c = color.clone();\n return mix(softLight(new Color(1, 1, 1), c.multiplyScalar(0.7)), new Color(1, 1, 1), highlightMap(transmissionCorrectionFactor));\n}\n\nexport function highlightMap(transmissionCorrectionFactor: number): Color {\n let a = smoothstep(0.2, 0.4, luma(new Color(0, 0, 0))) + (1 - transmissionCorrectionFactor);\n a = clamp(a, 0, 1);\n return new Color(a, a, a);\n}\n\nexport function smoothstep(edge0: number, edge1: number, x: number): number {\n const t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n return t * t * (3.0 - 2.0 * t);\n}\n\nexport function clamp(v: number, a: number, b: number): number {\n if (v < a) return a;\n if (v > b) return b;\n return v;\n}\n\nexport function mix(x: Color, y: Color, a: Color): Color {\n const c = new Color();\n c.r = x.r * (1 - a.r) + y.r * a.r;\n c.g = x.g * (1 - a.g) + y.g * a.g;\n c.b = x.b * (1 - a.b) + y.b * a.b;\n return c;\n}\n\nexport function luma(color: Color): number {\n const a = new Vector3(color.r, color.g, color.b);\n return a.dot(new Vector3(0.299, 0.587, 0.114));\n}\n\nexport function softLight(a: Color, b: Color): Color {\n const c = new Color();\n if (luma(a) <= 0.5) {\n c.r = (2.0 * a.r - 1.0) * (b.r - Math.pow(b.r, 2.0)) + b.r;\n c.g = (2.0 * a.g - 1.0) * (b.g - Math.pow(b.g, 2.0)) + b.g;\n c.b = (2.0 * a.b - 1.0) * (b.b - Math.pow(b.b, 2.0)) + b.b;\n } else {\n c.r = (2.0 * a.r - 1.0) * (Math.sqrt(b.r) - b.r) + b.r;\n c.g = (2.0 * a.g - 1.0) * (Math.sqrt(b.g) - b.g) + b.g;\n c.b = (2.0 * a.b - 1.0) * (Math.sqrt(b.b) - b.b) + b.b;\n }\n return c;\n}\n","import { LensStandardIridescentMaterial } from '../../Materials/LensStandardIridescentMaterial';\nimport { CubeTexture } from 'three';\n\nexport class IridescenceMaterialLoaderPlugin {\n constructor(parser) {\n this.parser = parser;\n this.name = 'ESSILORLUXOTTICA_materials_iridescence';\n }\n\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n\n if (!materialDef.extensions || !materialDef.extensions[this.name]) return null;\n return LensStandardIridescentMaterial;\n }\n\n loadMaterial(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return;\n }\n\n const extension = materialDef.extensions[this.name];\n\n //console.log(extension);\n\n const pending = [\n parser.loadTexture(extension.px.index),\n parser.loadTexture(extension.nx.index),\n parser.loadTexture(extension.py.index),\n parser.loadTexture(extension.ny.index),\n parser.loadTexture(extension.pz.index),\n parser.loadTexture(extension.nz.index)\n ];\n\n return Promise.all(pending).then((textures) => {\n const images = [];\n textures.forEach((element) => {\n images.push(element.image);\n });\n const colorMap = new CubeTexture(images);\n console.log(colorMap);\n const params = {\n map: colorMap,\n intensity: extension.intensity,\n mapX: extension.mapX,\n mapY: extension.mapY,\n mapZ: extension.mapZ,\n sensitivity: extension.sensitivity,\n opacity: extension.opacity\n };\n console.log('iridescent lens params', params);\n const mat = new LensStandardIridescentMaterial(params);\n mat.isLensStandardIridescentMaterial = true;\n mat.uniformsNeedUpdate = true;\n mat.needsUpdate = true;\n colorMap.needsUpdate = true;\n console.log(mat);\n return mat;\n });\n }\n}\n","import { Camera, Matrix4, Matrix3, Color, Texture, Euler, CubeTexture, Material, Mesh } from 'three';\nimport { LensStandardTransitionMirrorMaterial } from '../Materials/LensStandardTransitionMirrorMaterial';\nimport { LensStandardIridescentMaterial } from '../Materials/LensStandardIridescentMaterial';\nimport { LensStandardGradientMaterial } from '../Materials/LensStandardGradientMaterial';\nimport { LensStandardTransitionMirrorSRP } from '../Renderers/ScriptableRenderingPipelines/LensStandardTransitionMirrorSRP';\nimport { GLTFGlasses, GlassesRTWebGLRenderer } from '@luxottica/glasses-rt-webglrenderer';\nimport { applyTransmissionCorrection } from '../Helpers/MathUtils';\n\nexport enum LensTypes {\n INTEGRATED, // we use whatever is in the asset\n TRANSITION_MIRROR, // we use a transition mirror material with provided parameters\n IRIDESCENT, // we use an iridescent material\n GRADIENT // we use a gradient material with provided parameters\n}\n\n// defines the description of a lens as in the catalogue\nexport interface LensDescription {\n name?: string;\n comment?: string;\n lastUpdate?: number;\n type: 'STANDARD' | 'MIRROR' | 'GRADIENT';\n states: LensState[];\n}\n\nexport interface LensStep {\n transmission: [number, number, number];\n coatingSpecularity?: number;\n coatingSpecularColor?: [number, number, number];\n gradientHeight?: number;\n}\nexport interface LensState {\n name?: string;\n transmissionCorrectionFactor?: number;\n steps: LensStep[];\n}\n\n// actual parameters for the lens that needs to be passed to the materials (transition and gradient lenses)\nexport interface LensParameters {\n correctedTransmission: Color[];\n transmission: Color[];\n coatingSpecularColor: Color[];\n coatingSpecularity: number[];\n gradientHeight: number[];\n transmissionCorrectionFactor: number;\n lensType: LensTypes;\n}\n\n/**\n * computes the material parameters for a custom lens from its description and an interpolation value for the lens states.\n * Returns both uncorrected and corrected transmssion values.\n * Defined as a function so that it can be used without the custom lenses manager (e.g. callable also for b3d assets)\n * @param lensDescription\n * @param statesInterpolation\n * @returns\n */\nexport function computeLensParameters(lensDescription: LensDescription, statesInterpolation: number): LensParameters {\n // defaults\n let coatingSpecularColor = [new Color(1, 1, 1)];\n let coatingSpecularity = [0.1];\n let transmission = [new Color(1, 1, 1)];\n let correctedTransmission = [new Color(1, 1, 1)];\n let transmissionCorrectionFactor = 0.0;\n let gradientHeight = [1];\n\n const lensType = getLensType(lensDescription);\n\n if (lensType === LensTypes.TRANSITION_MIRROR) {\n const clear = lensDescription.states[0];\n const active = lensDescription.states[1];\n\n transmission = [\n new Color(clear.steps[0].transmission[0], clear.steps[0].transmission[1], clear.steps[0].transmission[2]).lerp(\n new Color(active.steps[0].transmission[0], active.steps[0].transmission[1], active.steps[0].transmission[2]),\n statesInterpolation\n )\n ];\n\n transmissionCorrectionFactor =\n statesInterpolation * (active.transmissionCorrectionFactor - clear.transmissionCorrectionFactor) + clear.transmissionCorrectionFactor;\n\n correctedTransmission = [applyTransmissionCorrection(transmission[0], transmissionCorrectionFactor)];\n\n if (active.steps[0].coatingSpecularity) {\n coatingSpecularity = [\n statesInterpolation * (active.steps[0].coatingSpecularity - clear.steps[0].coatingSpecularity) + clear.steps[0].coatingSpecularity\n ];\n\n coatingSpecularColor = [\n new Color(\n clear.steps[0].coatingSpecularColor[0],\n clear.steps[0].coatingSpecularColor[1],\n clear.steps[0].coatingSpecularColor[2]\n ).lerp(\n new Color(\n active.steps[0].coatingSpecularColor[0],\n active.steps[0].coatingSpecularColor[1],\n active.steps[0].coatingSpecularColor[2]\n ),\n statesInterpolation\n )\n ];\n }\n } else if (lensType === LensTypes.GRADIENT) {\n transmission = [];\n coatingSpecularColor = [];\n coatingSpecularity = [];\n gradientHeight = [];\n\n if (lensDescription.states.length === 1) {\n // just one state\n\n for (const step of lensDescription.states[0].steps) {\n transmission.push(new Color(step.transmission[0], step.transmission[1], step.transmission[2]));\n coatingSpecularColor.push(new Color(step.coatingSpecularColor[0], step.coatingSpecularColor[1], step.coatingSpecularColor[2]));\n coatingSpecularity.push(step.coatingSpecularity);\n gradientHeight.push(step.gradientHeight);\n }\n } else {\n const clear = lensDescription.states[0];\n const active = lensDescription.states[1];\n for (let i = 0; i < clear.steps.length; i++) {\n transmission.push(\n new Color(clear.steps[i].transmission[0], clear.steps[i].transmission[1], clear.steps[i].transmission[2]).lerp(\n new Color(active.steps[i].transmission[0], active.steps[i].transmission[1], active.steps[i].transmission[2]),\n statesInterpolation\n )\n );\n coatingSpecularColor.push(\n new Color(\n clear.steps[i].coatingSpecularColor[0],\n clear.steps[i].coatingSpecularColor[1],\n clear.steps[i].coatingSpecularColor[2]\n ).lerp(\n new Color(\n active.steps[i].coatingSpecularColor[0],\n active.steps[i].coatingSpecularColor[1],\n active.steps[i].coatingSpecularColor[2]\n ),\n statesInterpolation\n )\n );\n coatingSpecularity.push(\n statesInterpolation * (active.steps[i].coatingSpecularity - clear.steps[i].coatingSpecularity) + clear.steps[i].coatingSpecularity\n );\n gradientHeight.push(clear.steps[i].gradientHeight);\n }\n }\n }\n\n return {\n transmission,\n correctedTransmission,\n transmissionCorrectionFactor,\n coatingSpecularColor,\n coatingSpecularity,\n gradientHeight,\n lensType\n };\n}\n\n/**\n * returns the type of the lens from its description. Defined as a function so that it can be used\n * without the custom lenses manager (e.g. callable also for b3d assets)\n * @param lensDescription\n * @returns\n */\nexport function getLensType(lensDescription: LensDescription | undefined): LensTypes {\n if (lensDescription === undefined) {\n return LensTypes.INTEGRATED;\n }\n if (lensDescription.type === 'MIRROR' || lensDescription.type === 'STANDARD') {\n return LensTypes.TRANSITION_MIRROR;\n }\n if (lensDescription.type === 'GRADIENT') {\n return LensTypes.GRADIENT;\n }\n return LensTypes.INTEGRATED;\n}\n\nexport class GLTFLensesManager {\n protected transitionMirrorMaterial: LensStandardTransitionMirrorMaterial;\n protected gradientMaterial: LensStandardGradientMaterial;\n protected defaultLensesMaterial: Map = new Map();\n protected iridescentMaterials: Map = new Map();\n public actuaLensType = LensTypes.INTEGRATED;\n public glasses: GLTFGlasses;\n\n constructor(renderer?: GlassesRTWebGLRenderer) {\n this.transitionMirrorMaterial = new LensStandardTransitionMirrorMaterial();\n this.transitionMirrorMaterial.transparent = true;\n this.transitionMirrorMaterial.opacity = 0.5;\n this.transitionMirrorMaterial.defines = {\n ...this.transitionMirrorMaterial.defines,\n ...{\n TRANSITION_LEGACY: 0, // we handle transmission correction factor in js code\n LENS_LINEAR: 0 // for visual consistency with old vto/vm code\n }\n };\n\n this.gradientMaterial = new LensStandardGradientMaterial();\n this.gradientMaterial.defines = { ...this.gradientMaterial.defines, ...{ LENS_LINEAR: 1 } };\n this.gradientMaterial.transparent = true;\n this.transitionMirrorMaterial.opacity = 0.5;\n\n if (renderer) {\n renderer.addSRP(\n new LensStandardTransitionMirrorSRP({\n enableMirrorPass: true\n })\n );\n }\n }\n\n clear(): void {\n this.defaultLensesMaterial.clear();\n this.iridescentMaterials.clear();\n this.glasses = null;\n }\n\n dispose(): void {\n this.defaultLensesMaterial.clear(); // these materials, as part of an external asset, are not disposed\n this.iridescentMaterials.clear(); // these materials, as part of an external asset, are not disposed\n this.glasses = null;\n this.transitionMirrorMaterial.dispose();\n this.gradientMaterial.dispose();\n }\n\n // call this before starting to work with a glassets asset\n setGlasses(glasses: GLTFGlasses): void {\n this.glasses = glasses;\n this.defaultLensesMaterial.clear();\n this.iridescentMaterials.clear();\n glasses.meshes.lensL.forEach((m) => {\n this.defaultLensesMaterial.set(m, m.material);\n });\n glasses.meshes.lensR.forEach((m) => {\n this.defaultLensesMaterial.set(m, m.material);\n });\n if (glasses.hasIridescentLenses) {\n if (glasses.meshes.mirrorL.length > 0) {\n glasses.meshes.mirrorL.forEach((m) => {\n this.iridescentMaterials.set(m, m.material as LensStandardIridescentMaterial);\n });\n glasses.meshes.mirrorR.forEach((m) => {\n this.iridescentMaterials.set(m, m.material as LensStandardIridescentMaterial);\n });\n } else {\n glasses.meshes.lensL.forEach((m) => {\n this.iridescentMaterials.set(m, m.material as LensStandardIridescentMaterial);\n });\n glasses.meshes.lensR.forEach((m) => {\n this.iridescentMaterials.set(m, m.material as LensStandardIridescentMaterial);\n });\n }\n }\n }\n\n // call this when the lens description changes\n setLenses(lensDescription: LensDescription | undefined): boolean {\n this.actuaLensType = getLensType(lensDescription);\n if (this.glasses && this.glasses.hasIridescentLenses) {\n this.actuaLensType = LensTypes.IRIDESCENT;\n }\n\n if (this.actuaLensType === LensTypes.TRANSITION_MIRROR || this.actuaLensType === LensTypes.GRADIENT) {\n // hide mirror, if present\n this.glasses.meshes.mirrorL.forEach((m) => (m.visible = false));\n this.glasses.meshes.mirrorR.forEach((m) => (m.visible = false));\n }\n\n if (this.actuaLensType === LensTypes.TRANSITION_MIRROR) {\n this.glasses.meshes.lensL.forEach((m) => (m.material = this.transitionMirrorMaterial));\n this.glasses.meshes.lensR.forEach((m) => (m.material = this.transitionMirrorMaterial));\n } else if (this.actuaLensType === LensTypes.GRADIENT) {\n this.glasses.meshes.lensL.forEach((m) => (m.material = this.gradientMaterial));\n this.glasses.meshes.lensR.forEach((m) => (m.material = this.gradientMaterial));\n } else {\n // this means setting the lenses to the incorporated material\n this.glasses.meshes.lensL.forEach((m) => (m.material = this.glasses.defaultLensesMaterial.get(m)));\n this.glasses.meshes.lensR.forEach((m) => (m.material = this.glasses.defaultLensesMaterial.get(m)));\n this.glasses.meshes.mirrorL.forEach((m) => (m.visible = true));\n this.glasses.meshes.mirrorR.forEach((m) => (m.visible = true));\n }\n\n return true;\n }\n\n // call this before rendering the asset\n onBeforeRenderLenses(camera?: Camera, mat?: Matrix4): void {\n if (this.actuaLensType === LensTypes.IRIDESCENT) {\n let m: Matrix4;\n if (camera) {\n m = new Matrix4().copy(camera.matrixWorld).premultiply(this.glasses.gltf.matrixWorld);\n } else {\n m = mat;\n }\n const eul = new Euler().setFromRotationMatrix(m);\n this.iridescentMaterials.forEach((value, key) => value.updatesGlassesOrientation(eul));\n }\n }\n\n // computes the parameters for the lens materials and sets them\n // params is an object that can be used to pass additional parameters to the lens materials\n computeAndSetLensParameters(lensDescription: LensDescription | undefined, statesInterpolation: number, materialParams: any): void {\n if (this.actuaLensType === LensTypes.TRANSITION_MIRROR || this.actuaLensType === LensTypes.GRADIENT) {\n const lensParams = computeLensParameters(lensDescription, statesInterpolation);\n this.setLensParameters(lensParams, materialParams);\n }\n }\n\n // sets the parameters for the lens materials\n // additionalParams is an object that can be used to pass additional parameters to the lens materials\n setLensParameters(params: LensParameters, additionalParams: any): void {\n if (this.actuaLensType === LensTypes.TRANSITION_MIRROR) {\n this.transitionMirrorMaterial.setParameters({\n ...{\n lensTransmission: params.correctedTransmission[0],\n lensCoatingSpecularity: params.coatingSpecularity[0],\n lensCoatingSpecularColor: params.coatingSpecularColor[0]\n },\n ...additionalParams\n });\n } else if (this.actuaLensType === LensTypes.GRADIENT) {\n this.gradientMaterial.setParameters({\n ...{\n heightOnLensInterpolationFactor: params.gradientHeight,\n lensTransmission: params.transmission,\n lensCoatingSpecularity: params.coatingSpecularity,\n lensCoatingSpecularColor: params.coatingSpecularColor,\n lensMinY: this.glasses.meshes.lensL[0].geometry.boundingBox.min.y,\n lensMaxY: this.glasses.meshes.lensL[0].geometry.boundingBox.max.y\n },\n ...additionalParams\n });\n }\n }\n\n // sets the environment map for the lens materials\n setEnvironmentMap(envMap: Texture | CubeTexture, envMapIntensity = 1, rotationMatrix?: Matrix3): void {\n this.transitionMirrorMaterial.setParameters({ envMap: envMap, envMapIntensity: envMapIntensity });\n this.gradientMaterial.setParameters({ envMap: envMap, envMapIntensity: envMapIntensity });\n\n if (rotationMatrix) {\n this.transitionMirrorMaterial.setParameters({ reflectionVecMat: rotationMatrix });\n this.gradientMaterial.setParameters({ reflectionVecMat: rotationMatrix });\n }\n (this.transitionMirrorMaterial as any).envMap = envMap;\n this.transitionMirrorMaterial.uniformsNeedUpdate = true;\n\n (this.gradientMaterial as any).envMap = envMap;\n this.gradientMaterial.uniformsNeedUpdate = true;\n\n this.iridescentMaterials.forEach((value, key) => {\n (value as any).envMap = envMap;\n value.setParameters({ envMap: envMap });\n value.uniformsNeedUpdate = true;\n });\n }\n\n // controls the linear / srgb rendering of the transition mirror lenses\n setsRGBToLinearTransitionsLenses(value: boolean): void {\n this.transitionMirrorMaterial.setDefines({ LENS_LINEAR: value ? 1 : 0 });\n }\n\n // controls the linear / srgb rendering of the iridescent lenses\n setsRGBToLinearIridescentLenses(value: boolean): void {\n this.iridescentMaterials.forEach((m) => m.setLinearTosRGB(value));\n }\n}\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInstancedMesh,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTangentSpaceNormalMap,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tsRGBEncoding\n} from 'three';\n\nclass GLTFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( parser );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\tresourcePath = this.path;\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\tsetDDSLoader() {\n\n\t\tthrow new Error(\n\n\t\t\t'THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".'\n\n\t\t);\n\n\t}\n\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet json;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tjson = JSON.parse( data );\n\n\t\t} else if ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst magic = LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tjson = JSON.parse( extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content );\n\n\t\t\t} else {\n\n\t\t\t\tjson = JSON.parse( LoaderUtils.decodeText( new Uint8Array( data ) ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tjson = data;\n\n\t\t}\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\tEXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.fromArray( lightDef.color );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, sRGBEncoding ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenColor.fromArray( extension.sheenColorFactor );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, sRGBEncoding ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ] );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, sRGBEncoding ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n *\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n\t\tthis.parser = parser;\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( ! nodeDef.extensions || ! nodeDef.extensions[ this.name ] ||\n\t\t\tnodeDef.mesh === undefined ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst meshDef = json.meshes[ nodeDef.mesh ];\n\n\t\t// No Points or Lines + Instancing support yet\n\n\t\tfor ( const primitive of meshDef.primitives ) {\n\n\t\t\tif ( primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n\t\t\t\t primitive.mode !== undefined ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensionDef = nodeDef.extensions[ this.name ];\n\t\tconst attributesDef = extensionDef.attributes;\n\n\t\t// @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n\t\tconst pending = [];\n\t\tconst attributes = {};\n\n\t\tfor ( const key in attributesDef ) {\n\n\t\t\tpending.push( this.parser.getDependency( 'accessor', attributesDef[ key ] ).then( accessor => {\n\n\t\t\t\tattributes[ key ] = accessor;\n\t\t\t\treturn attributes[ key ];\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tif ( pending.length < 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tpending.push( this.parser.createNodeMesh( nodeIndex ) );\n\n\t\treturn Promise.all( pending ).then( results => {\n\n\t\t\tconst nodeObject = results.pop();\n\t\t\tconst meshes = nodeObject.isGroup ? nodeObject.children : [ nodeObject ];\n\t\t\tconst count = results[ 0 ].count; // All attribute counts should be same\n\t\t\tconst instancedMeshes = [];\n\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\t// Temporal variables\n\t\t\t\tconst m = new Matrix4();\n\t\t\t\tconst p = new Vector3();\n\t\t\t\tconst q = new Quaternion();\n\t\t\t\tconst s = new Vector3( 1, 1, 1 );\n\n\t\t\t\tconst instancedMesh = new InstancedMesh( mesh.geometry, mesh.material, count );\n\n\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\tif ( attributes.TRANSLATION ) {\n\n\t\t\t\t\t\tp.fromBufferAttribute( attributes.TRANSLATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.ROTATION ) {\n\n\t\t\t\t\t\tq.fromBufferAttribute( attributes.ROTATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.SCALE ) {\n\n\t\t\t\t\t\ts.fromBufferAttribute( attributes.SCALE, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinstancedMesh.setMatrixAt( i, m.compose( p, q, s ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Add instance attributes to the geometry, excluding TRS.\n\t\t\t\tfor ( const attributeName in attributes ) {\n\n\t\t\t\t\tif ( attributeName !== 'TRANSLATION' &&\n\t\t\t\t\t\t attributeName !== 'ROTATION' &&\n\t\t\t\t\t\t attributeName !== 'SCALE' ) {\n\n\t\t\t\t\t\tmesh.geometry.setAttribute( attributeName, attributes[ attributeName ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Just in case\n\t\t\t\tObject3D.prototype.copy.call( instancedMesh, mesh );\n\n\t\t\t\t// https://github.com/mrdoob/three.js/issues/18334\n\t\t\t\tinstancedMesh.frustumCulled = false;\n\t\t\t\tthis.parser.assignFinalMaterial( instancedMesh );\n\n\t\t\t\tinstancedMeshes.push( instancedMesh );\n\n\t\t\t}\n\n\t\t\tif ( nodeObject.isGroup ) {\n\n\t\t\t\tnodeObject.clear();\n\n\t\t\t\tnodeObject.add( ... instancedMeshes );\n\n\t\t\t\treturn nodeObject;\n\n\t\t\t}\n\n\t\t\treturn instancedMeshes[ 0 ];\n\n\t\t} );\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\n\t\tthis.header = {\n\t\t\tmagic: LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = LoaderUtils.decodeText( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV sets in \"' + this.name + '\" extension not yet supported.' );\n\n\t\t}\n\n\t\tif ( transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Specular-Glossiness Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness\n */\n\n/**\n * A sub class of StandardMaterial with some of the functionality\n * changed via the `onBeforeCompile` callback\n * @pailhead\n */\nclass GLTFMeshStandardSGMaterial extends MeshStandardMaterial {\n\n\tconstructor( params ) {\n\n\t\tsuper();\n\n\t\tthis.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t//various chunks that need replacing\n\t\tconst specularMapParsFragmentChunk = [\n\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t'\tuniform sampler2D specularMap;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst glossinessMapParsFragmentChunk = [\n\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t'\tuniform sampler2D glossinessMap;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst specularMapFragmentChunk = [\n\t\t\t'vec3 specularFactor = specular;',\n\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t'\tvec4 texelSpecular = texture2D( specularMap, vUv );',\n\t\t\t'\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t'\tspecularFactor *= texelSpecular.rgb;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst glossinessMapFragmentChunk = [\n\t\t\t'float glossinessFactor = glossiness;',\n\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t'\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',\n\t\t\t'\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t'\tglossinessFactor *= texelGlossiness.a;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst lightPhysicalFragmentChunk = [\n\t\t\t'PhysicalMaterial material;',\n\t\t\t'material.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );',\n\t\t\t'vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );',\n\t\t\t'float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );',\n\t\t\t'material.roughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.',\n\t\t\t'material.roughness += geometryRoughness;',\n\t\t\t'material.roughness = min( material.roughness, 1.0 );',\n\t\t\t'material.specularColor = specularFactor;',\n\t\t].join( '\\n' );\n\n\t\tconst uniforms = {\n\t\t\tspecular: { value: new Color().setHex( 0xffffff ) },\n\t\t\tglossiness: { value: 1 },\n\t\t\tspecularMap: { value: null },\n\t\t\tglossinessMap: { value: null }\n\t\t};\n\n\t\tthis._extraUniforms = uniforms;\n\n\t\tthis.onBeforeCompile = function ( shader ) {\n\n\t\t\tfor ( const uniformName in uniforms ) {\n\n\t\t\t\tshader.uniforms[ uniformName ] = uniforms[ uniformName ];\n\n\t\t\t}\n\n\t\t\tshader.fragmentShader = shader.fragmentShader\n\t\t\t\t.replace( 'uniform float roughness;', 'uniform vec3 specular;' )\n\t\t\t\t.replace( 'uniform float metalness;', 'uniform float glossiness;' )\n\t\t\t\t.replace( '#include ', specularMapParsFragmentChunk )\n\t\t\t\t.replace( '#include ', glossinessMapParsFragmentChunk )\n\t\t\t\t.replace( '#include ', specularMapFragmentChunk )\n\t\t\t\t.replace( '#include ', glossinessMapFragmentChunk )\n\t\t\t\t.replace( '#include ', lightPhysicalFragmentChunk );\n\n\t\t};\n\n\t\tObject.defineProperties( this, {\n\n\t\t\tspecular: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.specular.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.specular.value = v;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tspecularMap: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.specularMap.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.specularMap.value = v;\n\n\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\tthis.defines.USE_SPECULARMAP = ''; // USE_UV is set by the renderer for specular maps\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_SPECULARMAP;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tglossiness: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.glossiness.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.glossiness.value = v;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tglossinessMap: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.glossinessMap.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.glossinessMap.value = v;\n\n\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\tthis.defines.USE_GLOSSINESSMAP = '';\n\t\t\t\t\t\tthis.defines.USE_UV = '';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_GLOSSINESSMAP;\n\t\t\t\t\t\tdelete this.defines.USE_UV;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\t\tdelete this.metalness;\n\t\tdelete this.roughness;\n\t\tdelete this.metalnessMap;\n\t\tdelete this.roughnessMap;\n\n\t\tthis.setValues( params );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.specularMap = source.specularMap;\n\t\tthis.specular.copy( source.specular );\n\t\tthis.glossinessMap = source.glossinessMap;\n\t\tthis.glossiness = source.glossiness;\n\t\tdelete this.metalness;\n\t\tdelete this.roughness;\n\t\tdelete this.metalnessMap;\n\t\tdelete this.roughnessMap;\n\t\treturn this;\n\n\t}\n\n}\n\n\nclass GLTFMaterialsPbrSpecularGlossinessExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n\n\t\tthis.specularGlossinessParams = [\n\t\t\t'color',\n\t\t\t'map',\n\t\t\t'lightMap',\n\t\t\t'lightMapIntensity',\n\t\t\t'aoMap',\n\t\t\t'aoMapIntensity',\n\t\t\t'emissive',\n\t\t\t'emissiveIntensity',\n\t\t\t'emissiveMap',\n\t\t\t'bumpMap',\n\t\t\t'bumpScale',\n\t\t\t'normalMap',\n\t\t\t'normalMapType',\n\t\t\t'displacementMap',\n\t\t\t'displacementScale',\n\t\t\t'displacementBias',\n\t\t\t'specularMap',\n\t\t\t'specular',\n\t\t\t'glossinessMap',\n\t\t\t'glossiness',\n\t\t\t'alphaMap',\n\t\t\t'envMap',\n\t\t\t'envMapIntensity'\n\t\t];\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn GLTFMeshStandardSGMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pbrSpecularGlossiness = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst pending = [];\n\n\t\tif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {\n\n\t\t\tconst array = pbrSpecularGlossiness.diffuseFactor;\n\n\t\t\tmaterialParams.color.fromArray( array );\n\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t}\n\n\t\tif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'map', pbrSpecularGlossiness.diffuseTexture, sRGBEncoding ) );\n\n\t\t}\n\n\t\tmaterialParams.emissive = new Color( 0.0, 0.0, 0.0 );\n\t\tmaterialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;\n\t\tmaterialParams.specular = new Color( 1.0, 1.0, 1.0 );\n\n\t\tif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {\n\n\t\t\tmaterialParams.specular.fromArray( pbrSpecularGlossiness.specularFactor );\n\n\t\t}\n\n\t\tif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {\n\n\t\t\tconst specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;\n\t\t\tpending.push( parser.assignTexture( materialParams, 'glossinessMap', specGlossMapDef ) );\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularMap', specGlossMapDef, sRGBEncoding ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\tcreateMaterial( materialParams ) {\n\n\t\tconst material = new GLTFMeshStandardSGMaterial( materialParams );\n\t\tmaterial.fog = true;\n\n\t\tmaterial.color = materialParams.color;\n\n\t\tmaterial.map = materialParams.map === undefined ? null : materialParams.map;\n\n\t\tmaterial.lightMap = null;\n\t\tmaterial.lightMapIntensity = 1.0;\n\n\t\tmaterial.aoMap = materialParams.aoMap === undefined ? null : materialParams.aoMap;\n\t\tmaterial.aoMapIntensity = 1.0;\n\n\t\tmaterial.emissive = materialParams.emissive;\n\t\tmaterial.emissiveIntensity = materialParams.emissiveIntensity === undefined ? 1.0 : materialParams.emissiveIntensity;\n\t\tmaterial.emissiveMap = materialParams.emissiveMap === undefined ? null : materialParams.emissiveMap;\n\n\t\tmaterial.bumpMap = materialParams.bumpMap === undefined ? null : materialParams.bumpMap;\n\t\tmaterial.bumpScale = 1;\n\n\t\tmaterial.normalMap = materialParams.normalMap === undefined ? null : materialParams.normalMap;\n\t\tmaterial.normalMapType = TangentSpaceNormalMap;\n\n\t\tif ( materialParams.normalScale ) material.normalScale = materialParams.normalScale;\n\n\t\tmaterial.displacementMap = null;\n\t\tmaterial.displacementScale = 1;\n\t\tmaterial.displacementBias = 0;\n\n\t\tmaterial.specularMap = materialParams.specularMap === undefined ? null : materialParams.specularMap;\n\t\tmaterial.specular = materialParams.specular;\n\n\t\tmaterial.glossinessMap = materialParams.glossinessMap === undefined ? null : materialParams.glossinessMap;\n\t\tmaterial.glossiness = materialParams.glossiness;\n\n\t\tmaterial.alphaMap = null;\n\n\t\tmaterial.envMap = materialParams.envMap === undefined ? null : materialParams.envMap;\n\t\tmaterial.envMapIntensity = 1.0;\n\n\t\treturn material;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_q.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv2',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D|Material|BufferGeometry} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @param {BufferGeometry} geometry\n * @param {Array} targets\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\tlet geometryKey;\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\n\treturn 'image/png';\n\n}\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tconst isSafari = /^((?!chrome|android).)*safari/i.test( navigator.userAgent ) === true;\n\t\tconst isFirefox = navigator.userAgent.indexOf( 'Firefox' ) > - 1;\n\t\tconst firefoxVersion = isFirefox ? navigator.userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\tif ( typeof createImageBitmap === 'undefined' || isSafari || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\tPromise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this.loadNode( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\t// Ignore empty accessors, which may be used to declare runtime\n\t\t\t// information about attributes coming from another source (e.g. Draco\n\t\t\t// compression extension).\n\t\t\treturn Promise.resolve( null );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\ttexture.name = textureDef.name || sourceDef.name || '';\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, encoding ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\t// Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured\n\t\t\t// However, we will copy UV set 0 to UV set 1 on demand for aoMap\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' );\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( encoding !== undefined ) {\n\n\t\t\t\ttexture.encoding = encoding;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\t// workarounds for mesh and geometry\n\n\t\tif ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {\n\n\t\t\tgeometry.setAttribute( 'uv2', geometry.attributes.uv );\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {\n\n\t\t\tconst sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\n\t\t\tmaterialType = sgExtension.getMaterialType();\n\t\t\tpending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, sRGBEncoding ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tmaterialParams.emissive = new Color().fromArray( materialDef.emissiveFactor );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, sRGBEncoding ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tlet material;\n\n\t\t\tif ( materialType === GLTFMeshStandardSGMaterial ) {\n\n\t\t\t\tmaterial = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );\n\n\t\t\t} else {\n\n\t\t\t\tmaterial = new materialType( materialParams );\n\n\t\t\t}\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tlet name = sanitizedName;\n\n\t\tfor ( let i = 1; this.nodeNamesUsed[ name ]; ++ i ) {\n\n\t\t\tname = sanitizedName + '_' + i;\n\n\t\t}\n\n\t\tthis.nodeNamesUsed[ name ] = true;\n\n\t\treturn name;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array} primitives\n\t * @return {Promise>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) {\n\n\t\t\t\t\t\t// we normalize floating point skin weight array to fix malformed assets (see #15319)\n\t\t\t\t\t\t// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst skinEntry = { joints: skinDef.joints };\n\n\t\tif ( skinDef.inverseBindMatrices === undefined ) {\n\n\t\t\treturn Promise.resolve( skinEntry );\n\n\t\t}\n\n\t\treturn this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {\n\n\t\t\tskinEntry.inverseBindMatrices = accessor;\n\n\t\t\treturn skinEntry;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tnode.updateMatrix();\n\n\t\t\t\tlet TypedKeyframeTrack;\n\n\t\t\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase PATH_PROPERTIES.position:\n\t\t\t\t\tcase PATH_PROPERTIES.scale:\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tconst targetName = node.name ? node.name : node.uuid;\n\n\t\t\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\t\t\t\tconst targetNames = [];\n\n\t\t\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttargetNames.push( targetName );\n\n\t\t\t\t}\n\n\t\t\t\tlet outputArray = outputAccessor.array;\n\n\t\t\t\tif ( outputAccessor.normalized ) {\n\n\t\t\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t\t\t}\n\n\t\t\t\t\toutputArray = scaled;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\t\t\tinputAccessor.array,\n\t\t\t\t\t\toutputArray,\n\t\t\t\t\t\tinterpolation\n\t\t\t\t\t);\n\n\t\t\t\t\t// Override interpolation with custom factory method.\n\t\t\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\t\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t\t\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t\t\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t\t\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\t\t\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\t\t\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\t\t\t\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( track );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst name = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\t\treturn new AnimationClip( name, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\treturn ( function () {\n\n\t\t\tconst pending = [];\n\n\t\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t\t} );\n\n\t\t\tif ( meshPromise ) {\n\n\t\t\t\tpending.push( meshPromise );\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t\t} ) );\n\n\t\t\t}\n\n\t\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t\t} ).forEach( function ( promise ) {\n\n\t\t\t\tpending.push( promise );\n\n\t\t\t} );\n\n\t\t\treturn Promise.all( pending );\n\n\t\t}() ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( buildNodeHierarchy( nodeIds[ i ], scene, json, parser ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n}\n\nfunction buildNodeHierarchy( nodeId, parentObject, json, parser ) {\n\n\tconst nodeDef = json.nodes[ nodeId ];\n\n\treturn parser.getDependency( 'node', nodeId ).then( function ( node ) {\n\n\t\tif ( nodeDef.skin === undefined ) return node;\n\n\t\t// build skeleton here as well\n\n\t\tlet skinEntry;\n\n\t\treturn parser.getDependency( 'skin', nodeDef.skin ).then( function ( skin ) {\n\n\t\t\tskinEntry = skin;\n\n\t\t\tconst pendingJoints = [];\n\n\t\t\tfor ( let i = 0, il = skinEntry.joints.length; i < il; i ++ ) {\n\n\t\t\t\tpendingJoints.push( parser.getDependency( 'node', skinEntry.joints[ i ] ) );\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pendingJoints );\n\n\t\t} ).then( function ( jointNodes ) {\n\n\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\tif ( ! mesh.isMesh ) return;\n\n\t\t\t\tconst bones = [];\n\t\t\t\tconst boneInverses = [];\n\n\t\t\t\tfor ( let j = 0, jl = jointNodes.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst jointNode = jointNodes[ j ];\n\n\t\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\t\tif ( skinEntry.inverseBindMatrices !== undefined ) {\n\n\t\t\t\t\t\t\tmat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinEntry.joints[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.bind( new Skeleton( bones, boneInverses ), mesh.matrixWorld );\n\n\t\t\t} );\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t} ).then( function ( node ) {\n\n\t\t// build node hierachy\n\n\t\tparentObject.add( node );\n\n\t\tconst pending = [];\n\n\t\tif ( nodeDef.children ) {\n\n\t\t\tconst children = nodeDef.children;\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\t\t\t\tpending.push( buildNodeHierarchy( child, node, json, parser ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t} );\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {Number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tlet index = geometry.getIndex();\n\n\t// generate index if not present\n\n\tif ( index === null ) {\n\n\t\tconst indices = [];\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\tindices.push( i );\n\n\t\t\t}\n\n\t\t\tgeometry.setIndex( indices );\n\t\t\tindex = geometry.getIndex();\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\treturn geometry;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tconst numberOfTriangles = index.count - 2;\n\tconst newIndices = [];\n\n\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t// gl.TRIANGLE_FAN\n\n\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t}\n\n\t} else {\n\n\t\t// gl.TRIANGLE_STRIP\n\n\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\n\t\t\t} else {\n\n\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t}\n\n\t// build final geometry\n\n\tconst newGeometry = geometry.clone();\n\tnewGeometry.setIndex( newIndices );\n\n\treturn newGeometry;\n\n}\n\nexport { GLTFLoader };\n","import {\n\tDataTextureLoader,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearEncoding,\n\tLinearFilter\n} from 'three';\n\n// https://github.com/mrdoob/three.js/issues/5552\n// http://en.wikipedia.org/wiki/RGBE_image_format\n\nclass RGBELoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\t// adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n\tparse( buffer ) {\n\n\t\tconst\n\t\t\t/* return codes for rgbe routines */\n\t\t\t//RGBE_RETURN_SUCCESS = 0,\n\t\t\tRGBE_RETURN_FAILURE = - 1,\n\n\t\t\t/* default error routine. change this to change error handling */\n\t\t\trgbe_read_error = 1,\n\t\t\trgbe_write_error = 2,\n\t\t\trgbe_format_error = 3,\n\t\t\trgbe_memory_error = 4,\n\t\t\trgbe_error = function ( rgbe_error_code, msg ) {\n\n\t\t\t\tswitch ( rgbe_error_code ) {\n\n\t\t\t\t\tcase rgbe_read_error: console.error( 'THREE.RGBELoader Read Error: ' + ( msg || '' ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase rgbe_write_error: console.error( 'THREE.RGBELoader Write Error: ' + ( msg || '' ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase rgbe_format_error: console.error( 'THREE.RGBELoader Bad File Format: ' + ( msg || '' ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase rgbe_memory_error: console.error( 'THREE.RGBELoader: Error: ' + ( msg || '' ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn RGBE_RETURN_FAILURE;\n\n\t\t\t},\n\n\t\t\t/* offsets to red, green, and blue components in a data (float) pixel */\n\t\t\t//RGBE_DATA_RED = 0,\n\t\t\t//RGBE_DATA_GREEN = 1,\n\t\t\t//RGBE_DATA_BLUE = 2,\n\n\t\t\t/* number of floats per pixel, use 4 since stored in rgba image format */\n\t\t\t//RGBE_DATA_SIZE = 4,\n\n\t\t\t/* flags indicating which fields in an rgbe_header_info are valid */\n\t\t\tRGBE_VALID_PROGRAMTYPE = 1,\n\t\t\tRGBE_VALID_FORMAT = 2,\n\t\t\tRGBE_VALID_DIMENSIONS = 4,\n\n\t\t\tNEWLINE = '\\n',\n\n\t\t\tfgets = function ( buffer, lineLimit, consume ) {\n\n\t\t\t\tconst chunkSize = 128;\n\n\t\t\t\tlineLimit = ! lineLimit ? 1024 : lineLimit;\n\t\t\t\tlet p = buffer.pos,\n\t\t\t\t\ti = - 1, len = 0, s = '',\n\t\t\t\t\tchunk = String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\twhile ( ( 0 > ( i = chunk.indexOf( NEWLINE ) ) ) && ( len < lineLimit ) && ( p < buffer.byteLength ) ) {\n\n\t\t\t\t\ts += chunk; len += chunk.length;\n\t\t\t\t\tp += chunkSize;\n\t\t\t\t\tchunk += String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( - 1 < i ) {\n\n\t\t\t\t\t/*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n\t\t\t\t\tif ( false !== consume ) buffer.pos += len + i + 1;\n\t\t\t\t\treturn s + chunk.slice( 0, i );\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/* minimal header reading. modify if you want to parse more information */\n\t\t\tRGBE_ReadHeader = function ( buffer ) {\n\n\n\t\t\t\t// regexes to parse header info fields\n\t\t\t\tconst magic_token_re = /^#\\?(\\S+)/,\n\t\t\t\t\tgamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\texposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\tformat_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n\t\t\t\t\tdimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n\n\t\t\t\t\t// RGBE format header struct\n\t\t\t\t\theader = {\n\n\t\t\t\t\t\tvalid: 0, /* indicate which fields are valid */\n\n\t\t\t\t\t\tstring: '', /* the actual header string */\n\n\t\t\t\t\t\tcomments: '', /* comments found in header */\n\n\t\t\t\t\t\tprogramtype: 'RGBE', /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */\n\n\t\t\t\t\t\tformat: '', /* RGBE format, default 32-bit_rle_rgbe */\n\n\t\t\t\t\t\tgamma: 1.0, /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */\n\n\t\t\t\t\t\texposure: 1.0, /* a value of 1.0 in an image corresponds to watts/steradian/m^2. defaults to 1.0 */\n\n\t\t\t\t\t\twidth: 0, height: 0 /* image dimensions, width/height */\n\n\t\t\t\t\t};\n\n\t\t\t\tlet line, match;\n\n\t\t\t\tif ( buffer.pos >= buffer.byteLength || ! ( line = fgets( buffer ) ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_read_error, 'no header found' );\n\n\t\t\t\t}\n\n\t\t\t\t/* if you want to require the magic token then uncomment the next line */\n\t\t\t\tif ( ! ( match = line.match( magic_token_re ) ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'bad initial token' );\n\n\t\t\t\t}\n\n\t\t\t\theader.valid |= RGBE_VALID_PROGRAMTYPE;\n\t\t\t\theader.programtype = match[ 1 ];\n\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tline = fgets( buffer );\n\t\t\t\t\tif ( false === line ) break;\n\t\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\t\tif ( '#' === line.charAt( 0 ) ) {\n\n\t\t\t\t\t\theader.comments += line + '\\n';\n\t\t\t\t\t\tcontinue; // comment line\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( gamma_re ) ) {\n\n\t\t\t\t\t\theader.gamma = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( exposure_re ) ) {\n\n\t\t\t\t\t\theader.exposure = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( format_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_FORMAT;\n\t\t\t\t\t\theader.format = match[ 1 ];//'32-bit_rle_rgbe';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( dimensions_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_DIMENSIONS;\n\t\t\t\t\t\theader.height = parseInt( match[ 1 ], 10 );\n\t\t\t\t\t\theader.width = parseInt( match[ 2 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( header.valid & RGBE_VALID_FORMAT ) && ( header.valid & RGBE_VALID_DIMENSIONS ) ) break;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_FORMAT ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'missing format specifier' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_DIMENSIONS ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'missing image size specifier' );\n\n\t\t\t\t}\n\n\t\t\t\treturn header;\n\n\t\t\t},\n\n\t\t\tRGBE_ReadPixels_RLE = function ( buffer, w, h ) {\n\n\t\t\t\tconst scanline_width = w;\n\n\t\t\t\tif (\n\t\t\t\t\t// run length encoding is not allowed so read flat\n\t\t\t\t\t( ( scanline_width < 8 ) || ( scanline_width > 0x7fff ) ) ||\n\t\t\t\t\t// this file is not run length encoded\n\t\t\t\t\t( ( 2 !== buffer[ 0 ] ) || ( 2 !== buffer[ 1 ] ) || ( buffer[ 2 ] & 0x80 ) )\n\t\t\t\t) {\n\n\t\t\t\t\t// return the flat buffer\n\t\t\t\t\treturn new Uint8Array( buffer );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scanline_width !== ( ( buffer[ 2 ] << 8 ) | buffer[ 3 ] ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'wrong scanline width' );\n\n\t\t\t\t}\n\n\t\t\t\tconst data_rgba = new Uint8Array( 4 * w * h );\n\n\t\t\t\tif ( ! data_rgba.length ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );\n\n\t\t\t\t}\n\n\t\t\t\tlet offset = 0, pos = 0;\n\n\t\t\t\tconst ptr_end = 4 * scanline_width;\n\t\t\t\tconst rgbeStart = new Uint8Array( 4 );\n\t\t\t\tconst scanline_buffer = new Uint8Array( ptr_end );\n\t\t\t\tlet num_scanlines = h;\n\n\t\t\t\t// read in each successive scanline\n\t\t\t\twhile ( ( num_scanlines > 0 ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\tif ( pos + 4 > buffer.byteLength ) {\n\n\t\t\t\t\t\treturn rgbe_error( rgbe_read_error );\n\n\t\t\t\t\t}\n\n\t\t\t\t\trgbeStart[ 0 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 1 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 2 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 3 ] = buffer[ pos ++ ];\n\n\t\t\t\t\tif ( ( 2 != rgbeStart[ 0 ] ) || ( 2 != rgbeStart[ 1 ] ) || ( ( ( rgbeStart[ 2 ] << 8 ) | rgbeStart[ 3 ] ) != scanline_width ) ) {\n\n\t\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'bad rgbe scanline format' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// read each of the four channels for the scanline into the buffer\n\t\t\t\t\t// first red, then green, then blue, then exponent\n\t\t\t\t\tlet ptr = 0, count;\n\n\t\t\t\t\twhile ( ( ptr < ptr_end ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\t\tcount = buffer[ pos ++ ];\n\t\t\t\t\t\tconst isEncodedRun = count > 128;\n\t\t\t\t\t\tif ( isEncodedRun ) count -= 128;\n\n\t\t\t\t\t\tif ( ( 0 === count ) || ( ptr + count > ptr_end ) ) {\n\n\t\t\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'bad scanline data' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( isEncodedRun ) {\n\n\t\t\t\t\t\t\t// a (encoded) run of the same value\n\t\t\t\t\t\t\tconst byteValue = buffer[ pos ++ ];\n\t\t\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\tscanline_buffer[ ptr ++ ] = byteValue;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//ptr += count;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// a literal-run\n\t\t\t\t\t\t\tscanline_buffer.set( buffer.subarray( pos, pos + count ), ptr );\n\t\t\t\t\t\t\tptr += count; pos += count;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// now convert data from buffer into rgba\n\t\t\t\t\t// first red, then green, then blue, then exponent (alpha)\n\t\t\t\t\tconst l = scanline_width; //scanline_buffer.byteLength;\n\t\t\t\t\tfor ( let i = 0; i < l; i ++ ) {\n\n\t\t\t\t\t\tlet off = 0;\n\t\t\t\t\t\tdata_rgba[ offset ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 1 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 2 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 3 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toffset += 4;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnum_scanlines --;\n\n\t\t\t\t}\n\n\t\t\t\treturn data_rgba;\n\n\t\t\t};\n\n\t\tconst RGBEByteToRGBFloat = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\tdestArray[ destOffset + 0 ] = sourceArray[ sourceOffset + 0 ] * scale;\n\t\t\tdestArray[ destOffset + 1 ] = sourceArray[ sourceOffset + 1 ] * scale;\n\t\t\tdestArray[ destOffset + 2 ] = sourceArray[ sourceOffset + 2 ] * scale;\n\t\t\tdestArray[ destOffset + 3 ] = 1;\n\n\t\t};\n\n\t\tconst RGBEByteToRGBHalf = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\t// clamping to 65504, the maximum representable value in float16\n\t\t\tdestArray[ destOffset + 0 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 0 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 1 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 1 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 2 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 2 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 3 ] = DataUtils.toHalfFloat( 1 );\n\n\t\t};\n\n\t\tconst byteArray = new Uint8Array( buffer );\n\t\tbyteArray.pos = 0;\n\t\tconst rgbe_header_info = RGBE_ReadHeader( byteArray );\n\n\t\tif ( RGBE_RETURN_FAILURE !== rgbe_header_info ) {\n\n\t\t\tconst w = rgbe_header_info.width,\n\t\t\t\th = rgbe_header_info.height,\n\t\t\t\timage_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );\n\n\t\t\tif ( RGBE_RETURN_FAILURE !== image_rgba_data ) {\n\n\t\t\t\tlet data, type;\n\t\t\t\tlet numElements;\n\n\t\t\t\tswitch ( this.type ) {\n\n\t\t\t\t\tcase FloatType:\n\n\t\t\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\t\t\tconst floatArray = new Float32Array( numElements * 4 );\n\n\t\t\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\t\t\tRGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 4 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata = floatArray;\n\t\t\t\t\t\ttype = FloatType;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\t\t\tconst halfArray = new Uint16Array( numElements * 4 );\n\n\t\t\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\t\t\tRGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 4 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata = halfArray;\n\t\t\t\t\t\ttype = HalfFloatType;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.error( 'THREE.RGBELoader: unsupported type: ', this.type );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\twidth: w, height: h,\n\t\t\t\t\tdata: data,\n\t\t\t\t\theader: rgbe_header_info.string,\n\t\t\t\t\tgamma: rgbe_header_info.gamma,\n\t\t\t\t\texposure: rgbe_header_info.exposure,\n\t\t\t\t\ttype: type\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\tswitch ( texture.type ) {\n\n\t\t\t\tcase FloatType:\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\ttexture.encoding = LinearEncoding;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn super.load( url, onLoadCallback, onProgress, onError );\n\n\t}\n\n}\n\nexport { RGBELoader };\n","import { GLTF, GLTFLoaderPlugin, GLTFParser } from 'three/examples/jsm/loaders/GLTFLoader';\nimport { LensStandardIridescentMaterial, ILensesIridescentMaterialParameters } from '@luxottica/vm-renderer-core';\nimport { ImageLoader, Texture, CubeTexture, CubeTextureLoader } from 'three';\nimport { mapLinear } from 'three/src/math/MathUtils';\n\nexport default class IridescenceMaterialLoaderPlugin implements GLTFLoaderPlugin {\n \n parser: GLTFParser;\n name: string;\n\n constructor(parser: GLTFParser) {\n this.parser = parser;\n this.name = 'ESSILORLUXOTTICA_materials_iridescence';\n }\n\n getMaterialType(materialIndex: number) {\n const parser = this.parser;\n const materialDef = parser.json.materials[ materialIndex ];\n\n if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n return LensStandardIridescentMaterial;\n }\n\n\n loadMaterial(materialIndex: number){\n const parser = this.parser;\n const materialDef = parser.json.materials[ materialIndex ];\n\n if ( !materialDef.extensions || !materialDef.extensions[ this.name ] ) {\n return;\n }\n \n const extension = materialDef.extensions[ this.name ];\n\n const pending = [\n parser.loadTexture(extension.px.index),\n parser.loadTexture(extension.nx.index),\n parser.loadTexture(extension.py.index),\n parser.loadTexture(extension.ny.index),\n parser.loadTexture(extension.pz.index),\n parser.loadTexture(extension.nz.index)\n ];\n\n return Promise.all(pending).then((textures: Texture[])=>{\n const images = [];\n textures.forEach(element => {\n images.push(element.image);\n });\n const colorMap = new CubeTexture(images);\n const mat = new LensStandardIridescentMaterial({\n\n map: colorMap,\n intensity: extension.intensity,\n mapX: extension.mapX,\n mapY: extension.mapY,\n mapZ: extension.mapZ,\n sensitivity: extension.sensitivity,\n opacity: extension.opacity\n });\n mat.type = 'LensStandardIridescentMaterial';\n mat.uniformsNeedUpdate = true;\n mat.needsUpdate = true;\n colorMap.needsUpdate = true;\n return mat;\n });\n }\n}\n","import { CubeTexture, CubeTextureLoader, DataTexture, HalfFloatType, FloatType } from 'three';\nimport { GltfAssetPointer } from '@luxottica/vm-glasses';\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';\nimport { GlRenderDebugOptions } from '../objects/GlRenderDebugOptions';\nimport IridescenceMaterialLoaderPlugin from './IridescenceMaterialLoaderPlugin';\n\ninterface MiscGLTF {\n bounds: GLTF,\n landmarks: GLTF,\n}\n\ninterface GltfAsset {\n upc: string;\n gltfLod: GLTF[],\n nosepadType: string,\n fitting: string,\n flare: number,\n misc?: MiscGLTF\n sortInfo?: any\n}\n\nclass AssetLoader {\n \n private importCubeMap = async (debug: boolean): Promise => {\n // this way of import files permits to split environment maps files at compile time\n // and download the required one at run time\n if (debug) {\n return import('../constants/envMap/CubeMapDebug').then((cubeMap) => {\n return cubeMap.debugCubeMap;\n });\n } else {\n return import('../constants/envMap/CubeMap').then((cubeMap) => {\n return cubeMap.cubeMap;\n });\n }\n };\n\n private importEnvMap = async (debug: boolean): Promise => {\n // this way of import files permits to split environment maps files at compile time\n // and download the required one at run time\n if (debug) {\n return import('../constants/envMap/EnvironmentMapDebug').then((envMap) => {\n return envMap.debugHdrMap;\n });\n } else {\n return import('../constants/envMap/EnvironmentMap').then((envMap) => {\n return envMap.hdrMap;\n });\n }\n };\n\n public uploadCubeEnvMap (cubemap: any[]): Promise {\n return new Promise((resolve, reject) => {\n try {\n new CubeTextureLoader().load(cubemap, resolve, reject);\n } catch (e) {\n console.error(e);\n reject(e);\n }\n });\n }\n\n public loadCubeEnvMap (debug: GlRenderDebugOptions): Promise {\n return this.importCubeMap(debug.useDebugEnvMap).then((cubeMap) => {\n return this.uploadCubeEnvMap(cubeMap);\n });\n }\n\n public uploadEnvMap (base64: string) {\n return new Promise((resolve, reject) => {\n try {\n new RGBELoader()\n .setDataType(FloatType)\n .load(\n base64,\n (texture) => {\n resolve(texture);\n },\n undefined,\n (e) => {\n console.error(e);\n reject(e);\n }\n );\n } catch (e) {\n console.error(e);\n reject(e);\n }\n });\n }\n\n public loadEnvMap (debug: GlRenderDebugOptions): Promise {\n return this.importEnvMap(debug.useDebugEnvMap).then((envMap) => {\n return new Promise((resolve, reject) => {\n try {\n new RGBELoader()\n .setDataType(HalfFloatType)\n .load(\n envMap,\n (texture) => {\n resolve(texture);\n },\n undefined,\n reject\n );\n } catch (e) {\n console.error(e);\n reject(e);\n }\n });\n });\n }\n\n public loadGltf (url: string): Promise {\n return new Promise((resolve, reject) => {\n try {\n const loader = new GLTFLoader();\n loader.register((parser)=>{\n return new IridescenceMaterialLoaderPlugin(parser);\n });\n loader.load(\n url,\n resolve,\n undefined,\n reject);\n } catch (e) {\n console.error(e);\n reject(e);\n }\n });\n }\n\n public loadSortInfo(asset: GltfAssetPointer, result: GltfAsset): Promise {\n\n const promises: Array> = [];\n if (asset.gltfLodUrls.lod1.upcSiUrl ) {\n promises.push(fetch(asset.gltfLodUrls.lod1.upcSiUrl));\n }\n return Promise.all(promises).then((response) => response.length > 0 ? response[0].json() : undefined).then(( data) => {\n result.sortInfo = data;\n return result;\n\n });\n }\n\n public loadGltfAsset(asset: GltfAssetPointer): Promise {\n const promises = new Array>();\n promises.push(this.loadGltf(asset.gltfLodUrls.lod1.gltfUrl));\n if (asset.gltfLodUrls.lod2) {\n promises.push(this.loadGltf(asset.gltfLodUrls.lod2.gltfUrl));\n }\n \n if (asset.misc !== undefined) {\n if (asset.misc.boundsUrl) promises.push(this.loadGltf(asset.misc.boundsUrl));\n if (asset.misc.landmarksUrl) promises.push(this.loadGltf(asset.misc.landmarksUrl));\n }\n \n \n return Promise.all(promises).then((gltfarray) => {\n \n const result = {\n upc: asset.upc,\n gltfLod: (asset.gltfLodUrls.lod2) ? [gltfarray[0] as GLTF, gltfarray[1] as GLTF] : [gltfarray[0] as GLTF],\n nosepadType: asset.nosepadType,\n fitting: asset.fitting,\n flare: asset.flare,\n misc: undefined\n };\n if (asset.misc !== undefined) {\n result.misc = {};\n if (asset.misc.boundsUrl) {\n result.misc.bounds = (asset.gltfLodUrls.lod2) ? gltfarray[2] : gltfarray[1];\n \n }\n if (asset.misc.landmarksUrl) {\n if (asset.gltfLodUrls.lod2) {\n result.misc.landmarks = (asset.misc.boundsUrl) ? gltfarray[3] : gltfarray[2];\n } else {\n result.misc.landmarks = (asset.misc.boundsUrl) ? gltfarray[2] : gltfarray[1];\n }\n }\n }\n \n return this.loadSortInfo(asset, result);\n });\n }\n\n public parseGltf (url: ArrayBuffer): Promise {\n return new Promise((resolve, reject) => {\n try {\n new GLTFLoader().parse(\n url,\n undefined,\n (gltf: GLTF) => { resolve(gltf); },\n (error) => { throw error; });\n } catch (e) {\n console.error(e);\n reject(e);\n }\n });\n }\n} \n\n\nexport {\n AssetLoader, GltfAsset, MiscGLTF\n};\n","var SRBGShader = {\n\n uniforms: {\n 'tDiffuse': { value: null }\n },\n\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n\n fragmentShader:`\n uniform sampler2D tDiffuse;\n varying vec2 vUv;\n void main() {\n vec4 tex = texture2D( tDiffuse, vec2( vUv.x, vUv.y ) );\n gl_FragColor = LinearTosRGB( tex );\n }`\n};\n\nexport { SRBGShader };","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { ClampToEdgeWrapping, LinearFilter, Matrix3, RepeatWrapping, sRGBEncoding, Texture } from 'three';\nimport { name, version } from '../package.json';\nimport { GlRenderDebugOptions } from './objects/GlRenderDebugOptions';\nimport { RenderVideoData } from './objects/RenderVideoData';\n\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'BackgroundTexture');\n\nclass BackgroundTexture {\n private validPoseCount: number;\n private backgroundTexture: Texture[];\n private backgroundSrgbTexture: Texture[];\n\n constructor(mirror: boolean) {\n this.validPoseCount = 0;\n this.createTextures(mirror);\n }\n\n private createTextures(mirror: boolean) {\n this.backgroundTexture = new Array();\n for (let k = 0; k < 15; k++) {\n const bgTextr = new Texture();\n this.backgroundTexture.push(bgTextr);\n }\n\n if (mirror) {\n // compute uv.x*-1 + 1 (flip camera texture)\n this.backgroundTexture[0].matrixAutoUpdate = false; // forbid threejs to update image matrix\n this.backgroundTexture[0].matrix = new Matrix3().fromArray([-1, 0, 0, 0, 1, 0, 1, 0, 1]);\n // set clamp to edge wrappimg\n this.backgroundTexture[0].wrapS = ClampToEdgeWrapping;\n this.backgroundTexture[0].wrapT = ClampToEdgeWrapping;\n // disable mipmapping\n this.backgroundTexture[0].minFilter = LinearFilter;\n this.backgroundTexture[0].encoding = sRGBEncoding;\n\n }\n else{\n this.backgroundSrgbTexture = new Array();\n for (let k = 0; k < 15; k++) {\n const bgTextr = new Texture();\n bgTextr.encoding = sRGBEncoding;\n this.backgroundSrgbTexture.push(bgTextr);\n }\n }\n }\n\n public get texture(): Texture[] {\n return this.backgroundTexture;\n }\n\n public get sRGBTexture(): Texture[] {\n return this.backgroundSrgbTexture;\n }\n\n public dispose() {\n\n // use foreach to avoid to iterate an undefined array\n this.backgroundTexture?.forEach((t) => t.dispose());\n this.backgroundSrgbTexture?.forEach((t) => t.dispose());\n\n this.backgroundTexture = null;\n this.backgroundSrgbTexture = null;\n }\n\n public getValidPoseCount(): number {\n return this.validPoseCount;\n }\n\n public resetBackgroundTextures(mirror: boolean) {\n this.dispose();\n this.createTextures(mirror);\n }\n\n public updateVtoTexture(videoData: RenderVideoData): Promise {\n this.validPoseCount = 0;\n this.resetBackgroundTextures(false);\n const backgroundPromises = videoData.images.map((texture, id) => {\n const targetTexture = this.backgroundTexture[id];\n const targetSrgbTexture = this.backgroundSrgbTexture[id];\n if (targetTexture) {\n targetTexture.image = texture;\n targetTexture.needsUpdate = true;\n this.validPoseCount++;\n }\n if (targetSrgbTexture) {\n targetSrgbTexture.image = texture;\n targetSrgbTexture.needsUpdate = true;\n if (targetTexture === undefined)\n this.validPoseCount++;\n }\n return null;\n });\n return Promise.all(backgroundPromises);\n }\n\n public updateMirrorTexture(\n imageData: ImageData | HTMLCanvasElement\n ) {\n this.backgroundTexture[0].image = imageData;\n this.backgroundTexture[0].needsUpdate = true;\n }\n}\n\nexport { BackgroundTexture };\n","/**\n * Full-screen textured quad shader\n */\n\nconst CopyShader = {\n\n uniforms: {\n\n 'tDiffuse': { value: null },\n 'opacity': { value: 1.0 }\n\n },\n\n vertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n fragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = opacity * texel;\n\n\t\t}`\n\n};\n\nexport { CopyShader };\n","import {\n BufferGeometry,\n Float32BufferAttribute,\n OrthographicCamera,\n Mesh\n} from 'three';\n\nclass Pass {\n\n constructor() {\n\n // if set to true, the pass is processed by the composer\n this.enabled = true;\n\n // if set to true, the pass indicates to swap read and write buffer after rendering\n this.needsSwap = true;\n\n // if set to true, the pass clears its buffer before rendering\n this.clear = false;\n\n // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n this.renderToScreen = false;\n\n }\n\n setSize( /* width, height */ ) { return; }\n\n render( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n console.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n }\n\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\n\nconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n// https://github.com/mrdoob/three.js/pull/21358\n\nconst _geometry = new BufferGeometry();\n_geometry.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );\n_geometry.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\nclass FullScreenQuad {\n\n constructor( material ) {\n\n this._mesh = new Mesh( _geometry, material );\n\n }\n\n dispose() {\n\n this._mesh.geometry.dispose();\n\n }\n\n render( renderer ) {\n\n renderer.render( this._mesh, _camera );\n\n }\n\n get material() {\n\n return this._mesh.material;\n\n }\n\n set material( value ) {\n\n this._mesh.material = value;\n\n }\n\n}\n\nexport { Pass, FullScreenQuad };\n","import {\n ShaderMaterial,\n UniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\n\nclass ShaderPass extends Pass {\n\n constructor( shader, textureID ) {\n\n super();\n\n this.textureID = ( textureID !== undefined ) ? textureID : 'tDiffuse';\n\n if ( shader instanceof ShaderMaterial ) {\n\n this.uniforms = shader.uniforms;\n\n this.material = shader;\n\n } else if ( shader ) {\n\n this.uniforms = UniformsUtils.clone( shader.uniforms );\n\n this.material = new ShaderMaterial( {\n\n defines: Object.assign( {}, shader.defines ),\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader\n\n } );\n\n }\n\n this.fsQuad = new FullScreenQuad( this.material );\n\n }\n\n render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n if ( this.uniforms[ this.textureID ] ) {\n\n this.uniforms[ this.textureID ].value = readBuffer.texture;\n\n }\n\n this.fsQuad.material = this.material;\n\n if ( this.renderToScreen ) {\n\n renderer.setRenderTarget( null );\n this.fsQuad.render( renderer );\n\n } else {\n\n renderer.setRenderTarget( writeBuffer );\n // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n this.fsQuad.render( renderer );\n\n }\n\n }\n\n}\n\nexport { ShaderPass };\n","import { Pass } from './Pass.js';\n\nclass MaskPass extends Pass {\n\n constructor( scene, camera ) {\n\n super();\n\n this.scene = scene;\n this.camera = camera;\n\n this.clear = true;\n this.needsSwap = false;\n\n this.inverse = false;\n\n }\n\n render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n const context = renderer.getContext();\n const state = renderer.state;\n\n // don't update color or depth\n\n state.buffers.color.setMask( false );\n state.buffers.depth.setMask( false );\n\n // lock buffers\n\n state.buffers.color.setLocked( true );\n state.buffers.depth.setLocked( true );\n\n // set up stencil\n\n let writeValue, clearValue;\n\n if ( this.inverse ) {\n\n writeValue = 0;\n clearValue = 1;\n\n } else {\n\n writeValue = 1;\n clearValue = 0;\n\n }\n\n state.buffers.stencil.setTest( true );\n state.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE );\n state.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff );\n state.buffers.stencil.setClear( clearValue );\n state.buffers.stencil.setLocked( true );\n\n // draw into the stencil buffer\n\n renderer.setRenderTarget( readBuffer );\n if ( this.clear ) renderer.clear();\n renderer.render( this.scene, this.camera );\n\n renderer.setRenderTarget( writeBuffer );\n if ( this.clear ) renderer.clear();\n renderer.render( this.scene, this.camera );\n\n // unlock color and depth buffer for subsequent rendering\n\n state.buffers.color.setLocked( false );\n state.buffers.depth.setLocked( false );\n\n // only render where stencil is set to 1\n\n state.buffers.stencil.setLocked( false );\n state.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1\n state.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP );\n state.buffers.stencil.setLocked( true );\n\n }\n\n}\n\nclass ClearMaskPass extends Pass {\n\n constructor() {\n\n super();\n\n this.needsSwap = false;\n\n }\n\n render( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n renderer.state.buffers.stencil.setLocked( false );\n renderer.state.buffers.stencil.setTest( false );\n\n }\n\n}\n\nexport { MaskPass, ClearMaskPass };\n","import {\n BufferGeometry,\n Clock,\n Float32BufferAttribute,\n LinearFilter,\n Mesh,\n OrthographicCamera,\n RGBAFormat,\n Vector2,\n WebGLRenderTarget\n} from 'three';\nimport { CopyShader } from './shaders/CopyShader.js';\nimport { ShaderPass } from './ShaderPass.js';\nimport { MaskPass } from './MaskPass.js';\nimport { ClearMaskPass } from './MaskPass.js';\n\nclass EffectComposer {\n\n constructor( renderer, renderTarget, type = undefined ) {\n\n this.renderer = renderer;\n\n if ( renderTarget === undefined ) {\n\n const parameters = {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n format: RGBAFormat,\n stencilBuffer: true,\n type\n };\n\n const size = renderer.getSize( new Vector2() );\n this._pixelRatio = renderer.getPixelRatio();\n this._width = size.width;\n this._height = size.height;\n\n renderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, parameters );\n renderTarget.texture.name = 'EffectComposer.rt1';\n\n } else {\n\n this._pixelRatio = 1;\n this._width = renderTarget.width;\n this._height = renderTarget.height;\n\n }\n\n this.renderTarget1 = renderTarget;\n this.renderTarget2 = renderTarget.clone();\n this.renderTarget2.texture.name = 'EffectComposer.rt2';\n\n this.writeBuffer = this.renderTarget1;\n this.readBuffer = this.renderTarget2;\n\n this.renderToScreen = true;\n\n this.passes = [];\n\n // dependencies\n\n if ( CopyShader === undefined ) {\n\n console.error( 'THREE.EffectComposer relies on CopyShader' );\n\n }\n\n if ( ShaderPass === undefined ) {\n\n console.error( 'THREE.EffectComposer relies on ShaderPass' );\n\n }\n\n this.copyPass = new ShaderPass( CopyShader );\n\n this.clock = new Clock();\n\n }\n\n swapBuffers() {\n\n const tmp = this.readBuffer;\n this.readBuffer = this.writeBuffer;\n this.writeBuffer = tmp;\n\n }\n\n addPass( pass ) {\n\n this.passes.push( pass );\n pass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n }\n\n insertPass( pass, index ) {\n\n this.passes.splice( index, 0, pass );\n pass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n }\n \n hasPass( pass ) {\n return this.passes.indexOf( pass ) !== - 1;\n }\n\n removePass( pass ) {\n\n const index = this.passes.indexOf( pass );\n\n if ( index !== - 1 ) {\n\n this.passes.splice( index, 1 );\n\n }\n\n }\n\n isLastEnabledPass( passIndex ) {\n\n for ( let i = passIndex + 1; i < this.passes.length; i ++ ) {\n\n if ( this.passes[ i ].enabled ) {\n\n return false;\n\n }\n\n }\n\n return true;\n\n }\n\n render( deltaTime ) {\n\n // deltaTime value is in seconds\n\n if ( deltaTime === undefined ) {\n\n deltaTime = this.clock.getDelta();\n\n }\n\n const currentRenderTarget = this.renderer.getRenderTarget();\n\n let maskActive = false;\n\n for ( let i = 0, il = this.passes.length; i < il; i ++ ) {\n\n const pass = this.passes[ i ];\n\n if ( pass.enabled === false ) continue;\n\n pass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );\n pass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );\n\n if ( pass.needsSwap ) {\n\n if ( maskActive ) {\n\n const context = this.renderer.getContext();\n const stencil = this.renderer.state.buffers.stencil;\n\n //context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n stencil.setFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n this.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );\n\n //context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n stencil.setFunc( context.EQUAL, 1, 0xffffffff );\n\n }\n\n this.swapBuffers();\n\n }\n\n if ( MaskPass !== undefined ) {\n\n if ( pass instanceof MaskPass ) {\n\n maskActive = true;\n\n } else if ( pass instanceof ClearMaskPass ) {\n\n maskActive = false;\n\n }\n\n }\n\n }\n\n this.renderer.setRenderTarget( currentRenderTarget );\n\n }\n\n reset( renderTarget ) {\n\n if ( renderTarget === undefined ) {\n\n const size = this.renderer.getSize( new Vector2() );\n this._pixelRatio = this.renderer.getPixelRatio();\n this._width = size.width;\n this._height = size.height;\n\n renderTarget = this.renderTarget1.clone();\n renderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n }\n\n this.renderTarget1.dispose();\n this.renderTarget2.dispose();\n this.renderTarget1 = renderTarget;\n this.renderTarget2 = renderTarget.clone();\n\n this.writeBuffer = this.renderTarget1;\n this.readBuffer = this.renderTarget2;\n\n }\n\n setSize( width, height ) {\n\n this._width = width;\n this._height = height;\n\n const effectiveWidth = this._width * this._pixelRatio;\n const effectiveHeight = this._height * this._pixelRatio;\n\n this.renderTarget1.setSize( effectiveWidth, effectiveHeight );\n this.renderTarget2.setSize( effectiveWidth, effectiveHeight );\n\n for ( let i = 0; i < this.passes.length; i ++ ) {\n\n this.passes[ i ].setSize( effectiveWidth, effectiveHeight );\n\n }\n\n }\n\n setPixelRatio( pixelRatio ) {\n\n this._pixelRatio = pixelRatio;\n\n this.setSize( this._width, this._height );\n\n }\n\n}\n\n\nclass Pass {\n\n constructor() {\n\n // if set to true, the pass is processed by the composer\n this.enabled = true;\n\n // if set to true, the pass indicates to swap read and write buffer after rendering\n this.needsSwap = true;\n\n // if set to true, the pass clears its buffer before rendering\n this.clear = false;\n\n // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n this.renderToScreen = false;\n\n }\n\n setSize( /* width, height */ ) { return; }\n\n render( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n console.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n }\n\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\n\nconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n// https://github.com/mrdoob/three.js/pull/21358\n\nconst _geometry = new BufferGeometry();\n_geometry.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );\n_geometry.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\nclass FullScreenQuad {\n\n constructor( material ) {\n\n this._mesh = new Mesh( _geometry, material );\n\n }\n\n dispose() {\n\n this._mesh.geometry.dispose();\n\n }\n\n render( renderer ) {\n\n renderer.render( this._mesh, _camera );\n\n }\n\n get material() {\n\n return this._mesh.material;\n\n }\n\n set material( value ) {\n\n this._mesh.material = value;\n\n }\n\n}\n\nexport { EffectComposer, Pass, FullScreenQuad };\n","import {\n Color\n} from 'three';\nimport { Pass } from './Pass.js';\n\nclass RenderPass extends Pass {\n\n constructor( scene, camera, overrideMaterial, clearColor, clearAlpha ) {\n\n super();\n\n this.scene = scene;\n this.camera = camera;\n\n this.overrideMaterial = overrideMaterial;\n\n this.clearColor = clearColor;\n this.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\n this.clear = true;\n this.clearDepth = false;\n this.needsSwap = false;\n this._oldClearColor = new Color();\n\n }\n\n render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n const oldAutoClear = renderer.autoClear;\n renderer.autoClear = false;\n\n let oldClearAlpha, oldOverrideMaterial;\n\n if ( this.overrideMaterial !== undefined ) {\n\n oldOverrideMaterial = this.scene.overrideMaterial;\n\n this.scene.overrideMaterial = this.overrideMaterial;\n\n }\n\n if ( this.clearColor ) {\n\n renderer.getClearColor( this._oldClearColor );\n oldClearAlpha = renderer.getClearAlpha();\n\n renderer.setClearColor( this.clearColor, this.clearAlpha );\n\n }\n\n if ( this.clearDepth ) {\n\n renderer.clearDepth();\n\n }\n\n renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\n // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n renderer.render( this.scene, this.camera );\n\n if ( this.clearColor ) {\n\n renderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n }\n\n if ( this.overrideMaterial !== undefined ) {\n\n this.scene.overrideMaterial = oldOverrideMaterial;\n\n }\n\n renderer.autoClear = oldAutoClear;\n\n }\n\n}\n\nexport { RenderPass };\n","/**\n * Full-screen textured quad shader\n */\n\nimport blur3vert from '../../shaders/blur_3.vert';\nimport blur3frag from '../../shaders/blur_3.frag';\nimport { Texture, Vector2, Vector4 } from 'three';\n\n\nvar FillShader = {\n\n uniforms: {\n\n 'filterStep': { value: new Vector2() },\n 'texOffset': { value: new Vector2() },\n 'cropInfo': { value: new Vector4() },\n 'textr': { value: new Texture()}\n\n },\n\n vertexShader: blur3vert,\n\n fragmentShader: blur3frag\n\n};\n\nexport { FillShader };\n","import {GlRenderDebugOptions} from '../objects/GlRenderDebugOptions';\n\n// tslint:disable-next-line: variable-name\nexport const DefaultGlRenderDebugOptions: Complete = {\n showMeasurements: false,\n showMesh: false,\n showAxes: false,\n showGizmos: false,\n meshColor: [0.0, 1.0, 0.0, 0.5],\n checkError: false,\n hideGlasses: false,\n hideShadow: false,\n hideBackground: false,\n hideLenses: false,\n hideFrame: false,\n multipassDepth: 30,\n showInspector: false,\n depth: false,\n fittingVertices: false,\n calculatePupils: false,\n calculateMeshCenter: false,\n showMeshCenter: false,\n showPupils: false,\n showImagePupils: false,\n showPupilsNormals: false,\n showAntropometric: false,\n downloadGlasses: false,\n showFitArea: false,\n checkLensMap: false,\n checkSorting: false,\n useStaticTransitionMaterial: false,\n useDebugEnvMap: false,\n globalDebugMethods: false,\n dpi: 2,\n transmissionQuality: 5,\n};\n","function base64ToBuffer(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (const i of bytes.keys()) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\nexport default base64ToBuffer(\"eL4DAAAAQgABAAAAQQBCAAEAQwACAAEAQgBDAAIARAADAAIAQwBEAAMARQAEAAMARABFAAQARgAFAAQARQBGAAUARwAGAAUARgBHAAYASAAHAAYARwBIAAcASQAIAAcASABJAAgASgAJAAgASQBKAAkASwAKAAkASgBLAAoATAALAAoASwBMAAsATQAMAAsATABNAAwATgANAAwATQBOAA0ATwAOAA0ATgBPAA4AUAAPAA4ATwBQAA8AUQAQAA8AUABRABAAUgARABAAUQBSABEAUwASABEAUgBTABIAVAATABIAUwBUABMAVQAUABMAVABVABQAVgAVABQAVQBWABUAVwAWABUAVgBXABYAWAAXABYAVwBYABcAWQAYABcAWABZABgAWgAZABgAWQBaABkAWwAaABkAWgBbABoAXAAbABoAWwBcABsAXQAcABsAXABdABwAXgAdABwAXQBeAB0AXwAeAB0AXgBfAB4AYAAfAB4AXwBgAB8AYQAgAB8AYABhACAAYgAhACAAYQBiACEAYwAiACEAYgBjACIAZAAjACIAYwBkACMAZQAkACMAZABlACQAZgAlACQAZQBmACUAZwAmACUAZgBnACYAaAAnACYAZwBoACcAaQAoACcAaABpACgAagApACgAaQBqACkAawAqACkAagBrACoAbAArACoAawBsACsAbQAsACsAbABtACwAbgAtACwAbQBuAC0AbwAuAC0AbgBvAC4AcAAvAC4AbwBwAC8AcQAwAC8AcABxADAAcgAxADAAcQByADEAcwAyADEAcgBzADIAdAAzADIAcwB0ADMAdQA0ADMAdAB1ADQAdgA1ADQAdQB2ADUAdwA2ADUAdgB3ADYAeAA3ADYAdwB4ADcAeQA4ADcAeAB5ADgAegA5ADgAeQB6ADkAewA6ADkAegB7ADoAfAA7ADoAewB8ADsAfQA8ADsAfAB9ADwAfgA9ADwAfQB+AD0AfwA+AD0AfgB/AD4AgAA/AD4AfwCAAD8AgQBAAD8AgACBAEEAgwBCAEEAggCDAEIAhABDAEIAgwCEAEMAhQBEAEMAhACFAEQAhgBFAEQAhQCGAEUAhwBGAEUAhgCHAEYAiABHAEYAhwCIAEcAiQBIAEcAiACJAEgAigBJAEgAiQCKAEkAiwBKAEkAigCLAEoAjABLAEoAiwCMAEsAjQBMAEsAjACNAEwAjgBNAEwAjQCOAE0AjwBOAE0AjgCPAE4AkABPAE4AjwCQAE8AkQBQAE8AkACRAFAAkgBRAFAAkQCSAFEAkwBSAFEAkgCTAFIAlABTAFIAkwCUAFMAlQBUAFMAlACVAFQAlgBVAFQAlQCWAFUAlwBWAFUAlgCXAFYAmABXAFYAlwCYAFcAmQBYAFcAmACZAFgAmgBZAFgAmQCaAFkAmwBaAFkAmgCbAFoAnABbAFoAmwCcAFsAnQBcAFsAnACdAFwAngBdAFwAnQCeAF0AnwBeAF0AngCfAF4AoABfAF4AnwCgAF8AoQBgAF8AoAChAGAAogBhAGAAoQCiAGEAowBiAGEAogCjAGIApABjAGIAowCkAGMApQBkAGMApAClAGQApgBlAGQApQCmAGUApwBmAGUApgCnAGYAqABnAGYApwCoAGcAqQBoAGcAqACpAGgAqgBpAGgAqQCqAGkAqwBqAGkAqgCrAGoArABrAGoAqwCsAGsArQBsAGsArACtAGwArgBtAGwArQCuAG0ArwBuAG0ArgCvAG4AsABvAG4ArwCwAG8AsQBwAG8AsACxAHAAsgBxAHAAsQCyAHEAswByAHEAsgCzAHIAtABzAHIAswC0AHMAtQB0AHMAtAC1AHQAtgB1AHQAtQC2AHUAtwB2AHUAtgC3AHYAuAB3AHYAtwC4AHcAuQB4AHcAuAC5AHgAugB5AHgAuQC6AHkAuwB6AHkAugC7AHoAvAB7AHoAuwC8AHsAvQB8AHsAvAC9AHwAvgB9AHwAvQC+AH0AvwB+AH0AvgC/AH4AwAB/AH4AvwDAAH8AwQCAAH8AwADBAIAAwgCBAIAAwQDCAIIAxACDAIIAwwDEAIMAxQCEAIMAxADFAIQAxgCFAIQAxQDGAIUAxwCGAIUAxgDHAIYAyACHAIYAxwDIAIcAyQCIAIcAyADJAIgAygCJAIgAyQDKAIkAywCKAIkAygDLAIoAzACLAIoAywDMAIsAzQCMAIsAzADNAIwAzgCNAIwAzQDOAI0AzwCOAI0AzgDPAI4A0ACPAI4AzwDQAI8A0QCQAI8A0ADRAJAA0gCRAJAA0QDSAJEA0wCSAJEA0gDTAJIA1ACTAJIA0wDUAJMA1QCUAJMA1ADVAJQA1gCVAJQA1QDWAJUA1wCWAJUA1gDXAJYA2ACXAJYA1wDYAJcA2QCYAJcA2ADZAJgA2gCZAJgA2QDaAJkA2wCaAJkA2gDbAJoA3ACbAJoA2wDcAJsA3QCcAJsA3ADdAJwA3gCdAJwA3QDeAJ0A3wCeAJ0A3gDfAJ4A4ACfAJ4A3wDgAJ8A4QCgAJ8A4ADhAKAA4gChAKAA4QDiAKEA4wCiAKEA4gDjAKIA5ACjAKIA4wDkAKMA5QCkAKMA5ADlAKQA5gClAKQA5QDmAKUA5wCmAKUA5gDnAKYA6ACnAKYA5wDoAKcA6QCoAKcA6ADpAKgA6gCpAKgA6QDqAKkA6wCqAKkA6gDrAKoA7ACrAKoA6wDsAKsA7QCsAKsA7ADtAKwA7gCtAKwA7QDuAK0A7wCuAK0A7gDvAK4A8ACvAK4A7wDwAK8A8QCwAK8A8ADxALAA8gCxALAA8QDyALEA8wCyALEA8gDzALIA9ACzALIA8wD0ALMA9QC0ALMA9AD1ALQA9gC1ALQA9QD2ALUA9wC2ALUA9gD3ALYA+AC3ALYA9wD4ALcA+QC4ALcA+AD5ALgA+gC5ALgA+QD6ALkA+wC6ALkA+gD7ALoA/AC7ALoA+wD8ALsA/QC8ALsA/AD9ALwA/gC9ALwA/QD+AL0A/wC+AL0A/gD/AL4AAAG/AL4A/wAAAb8AAQHAAL8AAAEBAcAAAgHBAMAAAQECAcEAAwHCAMEAAgEDAcMABQHEAMMABAEFAcQABgHFAMQABQEGAcUABwHGAMUABgEHAcYACAHHAMYABwEIAccACQHIAMcACAEJAcgACgHJAMgACQEKAckACwHKAMkACgELAcoADAHLAMoACwEMAcsADQHMAMsADAENAcwADgHNAMwADQEOAc0ADwHOAM0ADgEPAc4AEAHPAM4ADwEQAc8AEQHQAM8AEAERAdAAEgHRANAAEQESAdEAEwHSANEAEgETAdIAFAHTANIAEwEUAdMAFQHUANMAFAEVAdQAFgHVANQAFQEWAdUAFwHWANUAFgEXAdYAGAHXANYAFwEYAdcAGQHYANcAGAEZAdgAGgHZANgAGQEaAdkAGwHaANkAGgEbAdoAHAHbANoAGwEcAdsAHQHcANsAHAEdAdwAHgHdANwAHQEeAd0AHwHeAN0AHgEfAd4AIAHfAN4AHwEgAd8AIQHgAN8AIAEhAeAAIgHhAOAAIQEiAeEAIwHiAOEAIgEjAeIAJAHjAOIAIwEkAeMAJQHkAOMAJAElAeQAJgHlAOQAJQEmAeUAJwHmAOUAJgEnAeYAKAHnAOYAJwEoAecAKQHoAOcAKAEpAegAKgHpAOgAKQEqAekAKwHqAOkAKgErAeoALAHrAOoAKwEsAesALQHsAOsALAEtAewALgHtAOwALQEuAe0ALwHuAO0ALgEvAe4AMAHvAO4ALwEwAe8AMQHwAO8AMAExAfAAMgHxAPAAMQEyAfEAMwHyAPEAMgEzAfIANAHzAPIAMwE0AfMANQH0APMANAE1AfQANgH1APQANQE2AfUANwH2APUANgE3AfYAOAH3APYANwE4AfcAOQH4APcAOAE5AfgAOgH5APgAOQE6AfkAOwH6APkAOgE7AfoAPAH7APoAOwE8AfsAPQH8APsAPAE9AfwAPgH9APwAPQE+Af0APwH+AP0APgE/Af4AQAH/AP4APwFAAf8AQQEAAf8AQAFBAQABQgEBAQABQQFCAQEBQwECAQEBQgFDAQIBRAEDAQIBQwFEAQQBRgEFAQQBRQFGAQUBRwEGAQUBRgFHAQYBSAEHAQYBRwFIAQcBSQEIAQcBSAFJAQgBSgEJAQgBSQFKAQkBSwEKAQkBSgFLAQoBTAELAQoBSwFMAQsBTQEMAQsBTAFNAQwBTgENAQwBTQFOAQ0BTwEOAQ0BTgFPAQ4BUAEPAQ4BTwFQAQ8BUQEQAQ8BUAFRARABUgERARABUQFSAREBUwESAREBUgFTARIBVAETARIBUwFUARMBVQEUARMBVAFVARQBVgEVARQBVQFWARUBVwEWARUBVgFXARYBWAEXARYBVwFYARcBWQEYARcBWAFZARgBWgEZARgBWQFaARkBWwEaARkBWgFbARoBXAEbARoBWwFcARsBXQEcARsBXAFdARwBXgEdARwBXQFeAR0BXwEeAR0BXgFfAR4BYAEfAR4BXwFgAR8BYQEgAR8BYAFhASABYgEhASABYQFiASEBYwEiASEBYgFjASIBZAEjASIBYwFkASMBZQEkASMBZAFlASQBZgElASQBZQFmASUBZwEmASUBZgFnASYBaAEnASYBZwFoAScBaQEoAScBaAFpASgBagEpASgBaQFqASkBawEqASkBagFrASoBbAErASoBawFsASsBbQEsASsBbAFtASwBbgEtASwBbQFuAS0BbwEuAS0BbgFvAS4BcAEvAS4BbwFwAS8BcQEwAS8BcAFxATABcgExATABcQFyATEBcwEyATEBcgFzATIBdAEzATIBcwF0ATMBdQE0ATMBdAF1ATQBdgE1ATQBdQF2ATUBdwE2ATUBdgF3ATYBeAE3ATYBdwF4ATcBeQE4ATcBeAF5ATgBegE5ATgBeQF6ATkBewE6ATkBegF7AToBfAE7AToBewF8ATsBfQE8ATsBfAF9ATwBfgE9ATwBfQF+AT0BfwE+AT0BfgF/AT4BgAE/AT4BfwGAAT8BgQFAAT8BgAGBAUABggFBAUABgQGCAUEBgwFCAUEBggGDAUIBhAFDAUIBgwGEAUMBhQFEAUMBhAGFAUUBhwFGAUUBhgGHAUYBiAFHAUYBhwGIAUcBiQFIAUcBiAGJAUgBigFJAUgBiQGKAUkBiwFKAUkBigGLAUoBjAFLAUoBiwGMAUsBjQFMAUsBjAGNAUwBjgFNAUwBjQGOAU0BjwFOAU0BjgGPAU4BkAFPAU4BjwGQAU8BkQFQAU8BkAGRAVABkgFRAVABkQGSAVEBkwFSAVEBkgGTAVIBlAFTAVIBkwGUAVMBlQFUAVMBlAGVAVQBlgFVAVQBlQGWAVUBlwFWAVUBlgGXAVYBmAFXAVYBlwGYAVcBmQFYAVcBmAGZAVgBmgFZAVgBmQGaAVkBmwFaAVkBmgGbAVoBnAFbAVoBmwGcAVsBnQFcAVsBnAGdAVwBngFdAVwBnQGeAV0BnwFeAV0BngGfAV4BoAFfAV4BnwGgAV8BoQFgAV8BoAGhAWABogFhAWABoQGiAWEBowFiAWEBogGjAWIBpAFjAWIBowGkAWMBpQFkAWMBpAGlAWQBpgFlAWQBpQGmAWUBpwFmAWUBpgGnAWYBqAFnAWYBpwGoAWcBqQFoAWcBqAGpAWgBqgFpAWgBqQGqAWkBqwFqAWkBqgGrAWoBrAFrAWoBqwGsAWsBrQFsAWsBrAGtAWwBrgFtAWwBrQGuAW0BrwFuAW0BrgGvAW4BsAFvAW4BrwGwAW8BsQFwAW8BsAGxAXABsgFxAXABsQGyAXEBswFyAXEBsgGzAXIBtAFzAXIBswG0AXMBtQF0AXMBtAG1AXQBtgF1AXQBtQG2AXUBtwF2AXUBtgG3AXYBuAF3AXYBtwG4AXcBuQF4AXcBuAG5AXgBugF5AXgBuQG6AXkBuwF6AXkBugG7AXoBvAF7AXoBuwG8AXsBvQF8AXsBvAG9AXwBvgF9AXwBvQG+AX0BvwF+AX0BvgG/AX4BwAF/AX4BvwHAAX8BwQGAAX8BwAHBAYABwgGBAYABwQHCAYEBwwGCAYEBwgHDAYIBxAGDAYIBwwHEAYMBxQGEAYMBxAHFAYQBxgGFAYQBxQHGAYYByAGHAYYBxwHIAYcByQGIAYcByAHJAYgBygGJAYgByQHKAYkBywGKAYkBygHLAYoBzAGLAYoBywHMAYsBzQGMAYsBzAHNAYwBzgGNAYwBzQHOAY0BzwGOAY0BzgHPAY4B0AGPAY4BzwHQAY8B0QGQAY8B0AHRAZAB0gGRAZAB0QHSAZEB0wGSAZEB0gHTAZIB1AGTAZIB0wHUAZMB1QGUAZMB1AHVAZQB1gGVAZQB1QHWAZUB1wGWAZUB1gHXAZYB2AGXAZYB1wHYAZcB2QGYAZcB2AHZAZgB2gGZAZgB2QHaAZkB2wGaAZkB2gHbAZoB3AGbAZoB2wHcAZsB3QGcAZsB3AHdAZwB3gGdAZwB3QHeAZ0B3wGeAZ0B3gHfAZ4B4AGfAZ4B3wHgAZ8B4QGgAZ8B4AHhAaAB4gGhAaAB4QHiAaEB4wGiAaEB4gHjAaIB5AGjAaIB4wHkAaMB5QGkAaMB5AHlAaQB5gGlAaQB5QHmAaUB5wGmAaUB5gHnAaYB6AGnAaYB5wHoAacB6QGoAacB6AHpAagB6gGpAagB6QHqAakB6wGqAakB6gHrAaoB7AGrAaoB6wHsAasB7QGsAasB7AHtAawB7gGtAawB7QHuAa0B7wGuAa0B7gHvAa4B8AGvAa4B7wHwAa8B8QGwAa8B8AHxAbAB8gGxAbAB8QHyAbEB8wGyAbEB8gHzAbIB9AGzAbIB8wH0AbMB9QG0AbMB9AH1AbQB9gG1AbQB9QH2AbUB9wG2AbUB9gH3AbYB+AG3AbYB9wH4AbcB+QG4AbcB+AH5AbgB+gG5AbgB+QH6AbkB+wG6AbkB+gH7AboB/AG7AboB+wH8AbsB/QG8AbsB/AH9AbwB/gG9AbwB/QH+Ab0B/wG+Ab0B/gH/Ab4BAAK/Ab4B/wEAAr8BAQLAAb8BAAIBAsABAgLBAcABAQICAsEBAwLCAcEBAgIDAsIBBALDAcIBAwIEAsMBBQLEAcMBBAIFAsQBBgLFAcQBBQIGAsUBBwLGAcUBBgIHAscBCQLIAccBCAIJAsgBCgLJAcgBCQIKAskBCwLKAckBCgILAsoBDALLAcoBCwIMAssBDQLMAcsBDAINAswBDgLNAcwBDQIOAs0BDwLOAc0BDgIPAs4BEALPAc4BDwIQAs8BEQLQAc8BEAIRAtABEgLRAdABEQISAtEBEwLSAdEBEgITAtIBFALTAdIBEwIUAtMBFQLUAdMBFAIVAtQBFgLVAdQBFQIWAtUBFwLWAdUBFgIXAtYBGALXAdYBFwIYAtcBGQLYAdcBGAIZAtgBGgLZAdgBGQIaAtkBGwLaAdkBGgIbAtoBHALbAdoBGwIcAtsBHQLcAdsBHAIdAtwBHgLdAdwBHQIeAt0BHwLeAd0BHgIfAt4BIALfAd4BHwIgAt8BIQLgAd8BIAIhAuABIgLhAeABIQIiAuEBIwLiAeEBIgIjAuIBJALjAeIBIwIkAuMBJQLkAeMBJAIlAuQBJgLlAeQBJQImAuUBJwLmAeUBJgInAuYBKALnAeYBJwIoAucBKQLoAecBKAIpAugBKgLpAegBKQIqAukBKwLqAekBKgIrAuoBLALrAeoBKwIsAusBLQLsAesBLAItAuwBLgLtAewBLQIuAu0BLwLuAe0BLgIvAu4BMALvAe4BLwIwAu8BMQLwAe8BMAIxAvABMgLxAfABMQIyAvEBMwLyAfEBMgIzAvIBNALzAfIBMwI0AvMBNQL0AfMBNAI1AvQBNgL1AfQBNQI2AvUBNwL2AfUBNgI3AvYBOAL3AfYBNwI4AvcBOQL4AfcBOAI5AvgBOgL5AfgBOQI6AvkBOwL6AfkBOgI7AvoBPAL7AfoBOwI8AvsBPQL8AfsBPAI9AvwBPgL9AfwBPQI+Av0BPwL+Af0BPgI/Av4BQAL/Af4BPwJAAv8BQQIAAv8BQAJBAgACQgIBAgACQQJCAgECQwICAgECQgJDAgICRAIDAgICQwJEAgMCRQIEAgMCRAJFAgQCRgIFAgQCRQJGAgUCRwIGAgUCRgJHAgYCSAIHAgYCRwJIAggCSgIJAggCSQJKAgkCSwIKAgkCSgJLAgoCTAILAgoCSwJMAgsCTQIMAgsCTAJNAgwCTgINAgwCTQJOAg0CTwIOAg0CTgJPAg4CUAIPAg4CTwJQAg8CUQIQAg8CUAJRAhACUgIRAhACUQJSAhECUwISAhECUgJTAhICVAITAhICUwJUAhMCVQIUAhMCVAJVAhQCVgIVAhQCVQJWAhUCVwIWAhUCVgJXAhYCWAIXAhYCVwJYAhcCWQIYAhcCWAJZAhgCWgIZAhgCWQJaAhkCWwIaAhkCWgJbAhoCXAIbAhoCWwJcAhsCXQIcAhsCXAJdAhwCXgIdAhwCXQJeAh0CXwIeAh0CXgJfAh4CYAIfAh4CXwJgAh8CYQIgAh8CYAJhAiACYgIhAiACYQJiAiECYwIiAiECYgJjAiICZAIjAiICYwJkAiMCZQIkAiMCZAJlAiQCZgIlAiQCZQJmAiUCZwImAiUCZgJnAiYCaAInAiYCZwJoAicCaQIoAicCaAJpAigCagIpAigCaQJqAikCawIqAikCagJrAioCbAIrAioCawJsAisCbQIsAisCbAJtAiwCbgItAiwCbQJuAi0CbwIuAi0CbgJvAi4CcAIvAi4CbwJwAi8CcQIwAi8CcAJxAjACcgIxAjACcQJyAjECcwIyAjECcgJzAjICdAIzAjICcwJ0AjMCdQI0AjMCdAJ1AjQCdgI1AjQCdQJ2AjUCdwI2AjUCdgJ3AjYCeAI3AjYCdwJ4AjcCeQI4AjcCeAJ5AjgCegI5AjgCeQJ6AjkCewI6AjkCegJ7AjoCfAI7AjoCewJ8AjsCfQI8AjsCfAJ9AjwCfgI9AjwCfQJ+Aj0CfwI+Aj0CfgJ/Aj4CgAI/Aj4CfwKAAj8CgQJAAj8CgAKBAkACggJBAkACgQKCAkECgwJCAkECggKDAkIChAJDAkICgwKEAkMChQJEAkMChAKFAkQChgJFAkQChQKGAkUChwJGAkUChgKHAkYCiAJHAkYChwKIAkcCiQJIAkcCiAKJAkkCiwJKAkkCigKLAkoCjAJLAkoCiwKMAksCjQJMAksCjAKNAkwCjgJNAkwCjQKOAk0CjwJOAk0CjgKPAk4CkAJPAk4CjwKQAk8CkQJQAk8CkAKRAlACkgJRAlACkQKSAlECkwJSAlECkgKTAlIClAJTAlICkwKUAlMClQJUAlMClAKVAlQClgJVAlQClQKWAlUClwJWAlUClgKXAlYCmAJXAlYClwKYAlcCmQJYAlcCmAKZAlgCmgJZAlgCmQKaAlkCmwJaAlkCmgKbAloCnAJbAloCmwKcAlsCnQJcAlsCnAKdAlwCngJdAlwCnQKeAl0CnwJeAl0CngKfAl4CoAJfAl4CnwKgAl8CoQJgAl8CoAKhAmACogJhAmACoQKiAmECowJiAmECogKjAmICpAJjAmICowKkAmMCpQJkAmMCpAKlAmQCpgJlAmQCpQKmAmUCpwJmAmUCpgKnAmYCqAJnAmYCpwKoAmcCqQJoAmcCqAKpAmgCqgJpAmgCqQKqAmkCqwJqAmkCqgKrAmoCrAJrAmoCqwKsAmsCrQJsAmsCrAKtAmwCrgJtAmwCrQKuAm0CrwJuAm0CrgKvAm4CsAJvAm4CrwKwAm8CsQJwAm8CsAKxAnACsgJxAnACsQKyAnECswJyAnECsgKzAnICtAJzAnICswK0AnMCtQJ0AnMCtAK1AnQCtgJ1AnQCtQK2AnUCtwJ2AnUCtgK3AnYCuAJ3AnYCtwK4AncCuQJ4AncCuAK5AngCugJ5AngCuQK6AnkCuwJ6AnkCugK7AnoCvAJ7AnoCuwK8AnsCvQJ8AnsCvAK9AnwCvgJ9AnwCvQK+An0CvwJ+An0CvgK/An4CwAJ/An4CvwLAAn8CwQKAAn8CwALBAoACwgKBAoACwQLCAoECwwKCAoECwgLDAoICxAKDAoICwwLEAoMCxQKEAoMCxALFAoQCxgKFAoQCxQLGAoUCxwKGAoUCxgLHAoYCyAKHAoYCxwLIAocCyQKIAocCyALJAogCygKJAogCyQLKAooCzAKLAooCywLMAosCzQKMAosCzALNAowCzgKNAowCzQLOAo0CzwKOAo0CzgLPAo4C0AKPAo4CzwLQAo8C0QKQAo8C0ALRApAC0gKRApAC0QLSApEC0wKSApEC0gLTApIC1AKTApIC0wLUApMC1QKUApMC1ALVApQC1gKVApQC1QLWApUC1wKWApUC1gLXApYC2AKXApYC1wLYApcC2QKYApcC2ALZApgC2gKZApgC2QLaApkC2wKaApkC2gLbApoC3AKbApoC2wLcApsC3QKcApsC3ALdApwC3gKdApwC3QLeAp0C3wKeAp0C3gLfAp4C4AKfAp4C3wLgAp8C4QKgAp8C4ALhAqAC4gKhAqAC4QLiAqEC4wKiAqEC4gLjAqIC5AKjAqIC4wLkAqMC5QKkAqMC5ALlAqQC5gKlAqQC5QLmAqUC5wKmAqUC5gLnAqYC6AKnAqYC5wLoAqcC6QKoAqcC6ALpAqgC6gKpAqgC6QLqAqkC6wKqAqkC6gLrAqoC7AKrAqoC6wLsAqsC7QKsAqsC7ALtAqwC7gKtAqwC7QLuAq0C7wKuAq0C7gLvAq4C8AKvAq4C7wLwAq8C8QKwAq8C8ALxArAC8gKxArAC8QLyArEC8wKyArEC8gLzArIC9AKzArIC8wL0ArMC9QK0ArMC9AL1ArQC9gK1ArQC9QL2ArUC9wK2ArUC9gL3ArYC+AK3ArYC9wL4ArcC+QK4ArcC+AL5ArgC+gK5ArgC+QL6ArkC+wK6ArkC+gL7AroC/AK7AroC+wL8ArsC/QK8ArsC/AL9ArwC/gK9ArwC/QL+Ar0C/wK+Ar0C/gL/Ar4CAAO/Ar4C/wIAA78CAQPAAr8CAAMBA8ACAgPBAsACAQMCA8ECAwPCAsECAgMDA8ICBAPDAsICAwMEA8MCBQPEAsMCBAMFA8QCBgPFAsQCBQMGA8UCBwPGAsUCBgMHA8YCCAPHAsYCBwMIA8cCCQPIAscCCAMJA8gCCgPJAsgCCQMKA8kCCwPKAskCCgMLA8sCDQPMAssCDAMNA8wCDgPNAswCDQMOA80CDwPOAs0CDgMPA84CEAPPAs4CDwMQA88CEQPQAs8CEAMRA9ACEgPRAtACEQMSA9ECEwPSAtECEgMTA9ICFAPTAtICEwMUA9MCFQPUAtMCFAMVA9QCFgPVAtQCFQMWA9UCFwPWAtUCFgMXA9YCGAPXAtYCFwMYA9cCGQPYAtcCGAMZA9gCGgPZAtgCGQMaA9kCGwPaAtkCGgMbA9oCHAPbAtoCGwMcA9sCHQPcAtsCHAMdA9wCHgPdAtwCHQMeA90CHwPeAt0CHgMfA94CIAPfAt4CHwMgA98CIQPgAt8CIAMhA+ACIgPhAuACIQMiA+ECIwPiAuECIgMjA+ICJAPjAuICIwMkA+MCJQPkAuMCJAMlA+QCJgPlAuQCJQMmA+UCJwPmAuUCJgMnA+YCKAPnAuYCJwMoA+cCKQPoAucCKAMpA+gCKgPpAugCKQMqA+kCKwPqAukCKgMrA+oCLAPrAuoCKwMsA+sCLQPsAusCLAMtA+wCLgPtAuwCLQMuA+0CLwPuAu0CLgMvA+4CMAPvAu4CLwMwA+8CMQPwAu8CMAMxA/ACMgPxAvACMQMyA/ECMwPyAvECMgMzA/ICNAPzAvICMwM0A/MCNQP0AvMCNAM1A/QCNgP1AvQCNQM2A/UCNwP2AvUCNgM3A/YCOAP3AvYCNwM4A/cCOQP4AvcCOAM5A/gCOgP5AvgCOQM6A/kCOwP6AvkCOgM7A/oCPAP7AvoCOwM8A/sCPQP8AvsCPAM9A/wCPgP9AvwCPQM+A/0CPwP+Av0CPgM/A/4CQAP/Av4CPwNAA/8CQQMAA/8CQANBAwADQgMBAwADQQNCAwEDQwMCAwEDQgNDAwIDRAMDAwIDQwNEAwMDRQMEAwMDRANFAwQDRgMFAwQDRQNGAwUDRwMGAwUDRgNHAwYDSAMHAwYDRwNIAwcDSQMIAwcDSANJAwgDSgMJAwgDSQNKAwkDSwMKAwkDSgNLAwoDTAMLAwoDSwNMAwwDTgMNAwwDTQNOAw0DTwMOAw0DTgNPAw4DUAMPAw4DTwNQAw8DUQMQAw8DUANRAxADUgMRAxADUQNSAxEDUwMSAxEDUgNTAxIDVAMTAxIDUwNUAxMDVQMUAxMDVANVAxQDVgMVAxQDVQNWAxUDVwMWAxUDVgNXAxYDWAMXAxYDVwNYAxcDWQMYAxcDWANZAxgDWgMZAxgDWQNaAxkDWwMaAxkDWgNbAxoDXAMbAxoDWwNcAxsDXQMcAxsDXANdAxwDXgMdAxwDXQNeAx0DXwMeAx0DXgNfAx4DYAMfAx4DXwNgAx8DYQMgAx8DYANhAyADYgMhAyADYQNiAyEDYwMiAyEDYgNjAyIDZAMjAyIDYwNkAyMDZQMkAyMDZANlAyQDZgMlAyQDZQNmAyUDZwMmAyUDZgNnAyYDaAMnAyYDZwNoAycDaQMoAycDaANpAygDagMpAygDaQNqAykDawMqAykDagNrAyoDbAMrAyoDawNsAysDbQMsAysDbANtAywDbgMtAywDbQNuAy0DbwMuAy0DbgNvAy4DcAMvAy4DbwNwAy8DcQMwAy8DcANxAzADcgMxAzADcQNyAzEDcwMyAzEDcgNzAzIDdAMzAzIDcwN0AzMDdQM0AzMDdAN1AzQDdgM1AzQDdQN2AzUDdwM2AzUDdgN3AzYDeAM3AzYDdwN4AzcDeQM4AzcDeAN5AzgDegM5AzgDeQN6AzkDewM6AzkDegN7AzoDfAM7AzoDewN8AzsDfQM8AzsDfAN9AzwDfgM9AzwDfQN+Az0DfwM+Az0DfgN/Az4DgAM/Az4DfwOAAz8DgQNAAz8DgAOBA0ADggNBA0ADgQOCA0EDgwNCA0EDggODA0IDhANDA0IDgwOEA0MDhQNEA0MDhAOFA0QDhgNFA0QDhQOGA0UDhwNGA0UDhgOHA0YDiANHA0YDhwOIA0cDiQNIA0cDiAOJA0gDigNJA0gDiQOKA0kDiwNKA0kDigOLA0oDjANLA0oDiwOMA0sDjQNMA0sDjAONA00DjwNOA00DjgOPA04DkANPA04DjwOQA08DkQNQA08DkAORA1ADkgNRA1ADkQOSA1EDkwNSA1EDkgOTA1IDlANTA1IDkwOUA1MDlQNUA1MDlAOVA1QDlgNVA1QDlQOWA1UDlwNWA1UDlgOXA1YDmANXA1YDlwOYA1cDmQNYA1cDmAOZA1gDmgNZA1gDmQOaA1kDmwNaA1kDmgObA1oDnANbA1oDmwOcA1sDnQNcA1sDnAOdA1wDngNdA1wDnQOeA10DnwNeA10DngOfA14DoANfA14DnwOgA18DoQNgA18DoAOhA2ADogNhA2ADoQOiA2EDowNiA2EDogOjA2IDpANjA2IDowOkA2MDpQNkA2MDpAOlA2QDpgNlA2QDpQOmA2UDpwNmA2UDpgOnA2YDqANnA2YDpwOoA2cDqQNoA2cDqAOpA2gDqgNpA2gDqQOqA2kDqwNqA2kDqgOrA2oDrANrA2oDqwOsA2sDrQNsA2sDrAOtA2wDrgNtA2wDrQOuA20DrwNuA20DrgOvA24DsANvA24DrwOwA28DsQNwA28DsAOxA3ADsgNxA3ADsQOyA3EDswNyA3EDsgOzA3IDtANzA3IDswO0A3MDtQN0A3MDtAO1A3QDtgN1A3QDtQO2A3UDtwN2A3UDtgO3A3YDuAN3A3YDtwO4A3cDuQN4A3cDuAO5A3gDugN5A3gDuQO6A3kDuwN6A3kDugO7A3oDvAN7A3oDuwO8A3sDvQN8A3sDvAO9A3wDvgN9A3wDvQO+A30DvwN+A30DvgO/A34DwAN/A34DvwPAA38DwQOAA38DwAPBA4ADwgOBA4ADwQPCA4EDwwOCA4EDwgPDA4IDxAODA4IDwwPEA4MDxQOEA4MDxAPFA4QDxgOFA4QDxQPGA4UDxwOGA4UDxgPHA4YDyAOHA4YDxwPIA4cDyQOIA4cDyAPJA4gDygOJA4gDyQPKA4kDywOKA4kDygPLA4oDzAOLA4oDywPMA4sDzQOMA4sDzAPNA4wDzgONA4wDzQPOA44D0AOPA44DzwPQA48D0QOQA48D0APRA5AD0gORA5AD0QPSA5ED0wOSA5ED0gPTA5ID1AOTA5ID0wPUA5MD1QOUA5MD1APVA5QD1gOVA5QD1QPWA5UD1wOWA5UD1gPXA5YD2AOXA5YD1wPYA5cD2QOYA5cD2APZA5gD2gOZA5gD2QPaA5kD2wOaA5kD2gPbA5oD3AObA5oD2wPcA5sD3QOcA5sD3APdA5wD3gOdA5wD3QPeA50D3wOeA50D3gPfA54D4AOfA54D3wPgA58D4QOgA58D4APhA6AD4gOhA6AD4QPiA6ED4wOiA6ED4gPjA6ID5AOjA6ID4wPkA6MD5QOkA6MD5APlA6QD5gOlA6QD5QPmA6UD5wOmA6UD5gPnA6YD6AOnA6YD5wPoA6cD6QOoA6cD6APpA6gD6gOpA6gD6QPqA6kD6wOqA6kD6gPrA6oD7AOrA6oD6wPsA6sD7QOsA6sD7APtA6wD7gOtA6wD7QPuA60D7wOuA60D7gPvA64D8AOvA64D7wPwA68D8QOwA68D8APxA7AD8gOxA7AD8QPyA7ED8wOyA7ED8gPzA7ID9AOzA7ID8wP0A7MD9QO0A7MD9AP1A7QD9gO1A7QD9QP2A7UD9wO2A7UD9gP3A7YD+AO3A7YD9wP4A7cD+QO4A7cD+AP5A7gD+gO5A7gD+QP6A7kD+wO6A7kD+gP7A7oD/AO7A7oD+wP8A7sD/QO8A7sD/AP9A7wD/gO9A7wD/QP+A70D/wO+A70D/gP/A74DAAS/A74D/wMABL8DAQTAA78DAAQBBMADAgTBA8ADAQQCBMEDAwTCA8EDAgQDBMIDBATDA8IDAwQEBMMDBQTEA8MDBAQFBMQDBgTFA8QDBQQGBMUDBwTGA8UDBgQHBMYDCATHA8YDBwQIBMcDCQTIA8cDCAQJBMgDCgTJA8gDCQQKBMkDCwTKA8kDCgQLBMoDDATLA8oDCwQMBMsDDQTMA8sDDAQNBMwDDgTNA8wDDQQOBM0DDwTOA80DDgQPBM8DEQTQA88DEAQRBNADEgTRA9ADEQQSBNEDEwTSA9EDEgQTBNIDFATTA9IDEwQUBNMDFQTUA9MDFAQVBNQDFgTVA9QDFQQWBNUDFwTWA9UDFgQXBNYDGATXA9YDFwQYBNcDGQTYA9cDGAQZBNgDGgTZA9gDGQQaBNkDGwTaA9kDGgQbBNoDHATbA9oDGwQcBNsDHQTcA9sDHAQdBNwDHgTdA9wDHQQeBN0DHwTeA90DHgQfBN4DIATfA94DHwQgBN8DIQTgA98DIAQhBOADIgThA+ADIQQiBOEDIwTiA+EDIgQjBOIDJATjA+IDIwQkBOMDJQTkA+MDJAQlBOQDJgTlA+QDJQQmBOUDJwTmA+UDJgQnBOYDKATnA+YDJwQoBOcDKQToA+cDKAQpBOgDKgTpA+gDKQQqBOkDKwTqA+kDKgQrBOoDLATrA+oDKwQsBOsDLQTsA+sDLAQtBOwDLgTtA+wDLQQuBO0DLwTuA+0DLgQvBO4DMATvA+4DLwQwBO8DMQTwA+8DMAQxBPADMgTxA/ADMQQyBPEDMwTyA/EDMgQzBPIDNATzA/IDMwQ0BPMDNQT0A/MDNAQ1BPQDNgT1A/QDNQQ2BPUDNwT2A/UDNgQ3BPYDOAT3A/YDNwQ4BPcDOQT4A/cDOAQ5BPgDOgT5A/gDOQQ6BPkDOwT6A/kDOgQ7BPoDPAT7A/oDOwQ8BPsDPQT8A/sDPAQ9BPwDPgT9A/wDPQQ+BP0DPwT+A/0DPgQ/BP4DQAT/A/4DPwRABP8DQQQABP8DQARBBAAEQgQBBAAEQQRCBAEEQwQCBAEEQgRDBAIERAQDBAIEQwREBAMERQQEBAMERARFBAQERgQFBAQERQRGBAUERwQGBAUERgRHBAYESAQHBAYERwRIBAcESQQIBAcESARJBAgESgQJBAgESQRKBAkESwQKBAkESgRLBAoETAQLBAoESwRMBAsETQQMBAsETARNBAwETgQNBAwETQROBA0ETwQOBA0ETgRPBA4EUAQPBA4ETwRQBBAEUgQRBBAEUQRSBBEEUwQSBBEEUgRTBBIEVAQTBBIEUwRUBBMEVQQUBBMEVARVBBQEVgQVBBQEVQRWBBUEVwQWBBUEVgRXBBYEWAQXBBYEVwRYBBcEWQQYBBcEWARZBBgEWgQZBBgEWQRaBBkEWwQaBBkEWgRbBBoEXAQbBBoEWwRcBBsEXQQcBBsEXARdBBwEXgQdBBwEXQReBB0EXwQeBB0EXgRfBB4EYAQfBB4EXwRgBB8EYQQgBB8EYARhBCAEYgQhBCAEYQRiBCEEYwQiBCEEYgRjBCIEZAQjBCIEYwRkBCMEZQQkBCMEZARlBCQEZgQlBCQEZQRmBCUEZwQmBCUEZgRnBCYEaAQnBCYEZwRoBCcEaQQoBCcEaARpBCgEagQpBCgEaQRqBCkEawQqBCkEagRrBCoEbAQrBCoEawRsBCsEbQQsBCsEbARtBCwEbgQtBCwEbQRuBC0EbwQuBC0EbgRvBC4EcAQvBC4EbwRwBC8EcQQwBC8EcARxBDAEcgQxBDAEcQRyBDEEcwQyBDEEcgRzBDIEdAQzBDIEcwR0BDMEdQQ0BDMEdAR1BDQEdgQ1BDQEdQR2BDUEdwQ2BDUEdgR3BDYEeAQ3BDYEdwR4BDcEeQQ4BDcEeAR5BDgEegQ5BDgEeQR6BDkEewQ6BDkEegR7BDoEfAQ7BDoEewR8BDsEfQQ8BDsEfAR9BDwEfgQ9BDwEfQR+BD0EfwQ+BD0EfgR/BD4EgAQ/BD4EfwSABD8EgQRABD8EgASBBEAEggRBBEAEgQSCBEEEgwRCBEEEggSDBEIEhARDBEIEgwSEBEMEhQREBEMEhASFBEQEhgRFBEQEhQSGBEUEhwRGBEUEhgSHBEYEiARHBEYEhwSIBEcEiQRIBEcEiASJBEgEigRJBEgEiQSKBEkEiwRKBEkEigSLBEoEjARLBEoEiwSMBEsEjQRMBEsEjASNBEwEjgRNBEwEjQSOBE0EjwROBE0EjgSPBE4EkARPBE4EjwSQBE8EkQRQBE8EkASRBFEEkwRSBFEEkgSTBFIElARTBFIEkwSUBFMElQRUBFMElASVBFQElgRVBFQElQSWBFUElwRWBFUElgSXBFYEmARXBFYElwSYBFcEmQRYBFcEmASZBFgEmgRZBFgEmQSaBFkEmwRaBFkEmgSbBFoEnARbBFoEmwScBFsEnQRcBFsEnASdBFwEngRdBFwEnQSeBF0EnwReBF0EngSfBF4EoARfBF4EnwSgBF8EoQRgBF8EoAShBGAEogRhBGAEoQSiBGEEowRiBGEEogSjBGIEpARjBGIEowSkBGMEpQRkBGMEpASlBGQEpgRlBGQEpQSmBGUEpwRmBGUEpgSnBGYEqARnBGYEpwSoBGcEqQRoBGcEqASpBGgEqgRpBGgEqQSqBGkEqwRqBGkEqgSrBGoErARrBGoEqwSsBGsErQRsBGsErAStBGwErgRtBGwErQSuBG0ErwRuBG0ErgSvBG4EsARvBG4ErwSwBG8EsQRwBG8EsASxBHAEsgRxBHAEsQSyBHEEswRyBHEEsgSzBHIEtARzBHIEswS0BHMEtQR0BHMEtAS1BHQEtgR1BHQEtQS2BHUEtwR2BHUEtgS3BHYEuAR3BHYEtwS4BHcEuQR4BHcEuAS5BHgEugR5BHgEuQS6BHkEuwR6BHkEugS7BHoEvAR7BHoEuwS8BHsEvQR8BHsEvAS9BHwEvgR9BHwEvQS+BH0EvwR+BH0EvgS/BH4EwAR/BH4EvwTABH8EwQSABH8EwATBBIAEwgSBBIAEwQTCBIEEwwSCBIEEwgTDBIIExASDBIIEwwTEBIMExQSEBIMExATFBIQExgSFBIQExQTGBIUExwSGBIUExgTHBIYEyASHBIYExwTIBIcEyQSIBIcEyATJBIgEygSJBIgEyQTKBIkEywSKBIkEygTLBIoEzASLBIoEywTMBIsEzQSMBIsEzATNBIwEzgSNBIwEzQTOBI0EzwSOBI0EzgTPBI4E0ASPBI4EzwTQBI8E0QSQBI8E0ATRBJAE0gSRBJAE0QTSBJIE1ASTBJIE0wTUBJME1QSUBJME1ATVBJQE1gSVBJQE1QTWBJUE1wSWBJUE1gTXBJYE2ASXBJYE1wTYBJcE2QSYBJcE2ATZBJgE2gSZBJgE2QTaBJkE2wSaBJkE2gTbBJoE3ASbBJoE2wTcBJsE3QScBJsE3ATdBJwE3gSdBJwE3QTeBJ0E3wSeBJ0E3gTfBJ4E4ASfBJ4E3wTgBJ8E4QSgBJ8E4AThBKAE4gShBKAE4QTiBKEE4wSiBKEE4gTjBKIE5ASjBKIE4wTkBKME5QSkBKME5ATlBKQE5gSlBKQE5QTmBKUE5wSmBKUE5gTnBKYE6ASnBKYE5wToBKcE6QSoBKcE6ATpBKgE6gSpBKgE6QTqBKkE6wSqBKkE6gTrBKoE7ASrBKoE6wTsBKsE7QSsBKsE7ATtBKwE7gStBKwE7QTuBK0E7wSuBK0E7gTvBK4E8ASvBK4E7wTwBK8E8QSwBK8E8ATxBLAE8gSxBLAE8QTyBLEE8wSyBLEE8gTzBLIE9ASzBLIE8wT0BLME9QS0BLME9AT1BLQE9gS1BLQE9QT2BLUE9wS2BLUE9gT3BLYE+AS3BLYE9wT4BLcE+QS4BLcE+AT5BLgE+gS5BLgE+QT6BLkE+wS6BLkE+gT7BLoE/AS7BLoE+wT8BLsE/QS8BLsE/AT9BLwE/gS9BLwE/QT+BL0E/wS+BL0E/gT/BL4EAAW/BL4E/wQABb8EAQXABL8EAAUBBcAEAgXBBMAEAQUCBcEEAwXCBMEEAgUDBcIEBAXDBMIEAwUEBcMEBQXEBMMEBAUFBcQEBgXFBMQEBQUGBcUEBwXGBMUEBgUHBcYECAXHBMYEBwUIBccECQXIBMcECAUJBcgECgXJBMgECQUKBckECwXKBMkECgULBcoEDAXLBMoECwUMBcsEDQXMBMsEDAUNBcwEDgXNBMwEDQUOBc0EDwXOBM0EDgUPBc4EEAXPBM4EDwUQBc8EEQXQBM8EEAURBdAEEgXRBNAEEQUSBdEEEwXSBNEEEgUTBdMEFQXUBNMEFAUVBdQEFgXVBNQEFQUWBdUEFwXWBNUEFgUXBdYEGAXXBNYEFwUYBdcEGQXYBNcEGAUZBdgEGgXZBNgEGQUaBdkEGwXaBNkEGgUbBdoEHAXbBNoEGwUcBdsEHQXcBNsEHAUdBdwEHgXdBNwEHQUeBd0EHwXeBN0EHgUfBd4EIAXfBN4EHwUgBd8EIQXgBN8EIAUhBeAEIgXhBOAEIQUiBeEEIwXiBOEEIgUjBeIEJAXjBOIEIwUkBeMEJQXkBOMEJAUlBeQEJgXlBOQEJQUmBeUEJwXmBOUEJgUnBeYEKAXnBOYEJwUoBecEKQXoBOcEKAUpBegEKgXpBOgEKQUqBekEKwXqBOkEKgUrBeoELAXrBOoEKwUsBesELQXsBOsELAUtBewELgXtBOwELQUuBe0ELwXuBO0ELgUvBe4EMAXvBO4ELwUwBe8EMQXwBO8EMAUxBfAEMgXxBPAEMQUyBfEEMwXyBPEEMgUzBfIENAXzBPIEMwU0BfMENQX0BPMENAU1BfQENgX1BPQENQU2BfUENwX2BPUENgU3BfYEOAX3BPYENwU4BfcEOQX4BPcEOAU5BfgEOgX5BPgEOQU6BfkEOwX6BPkEOgU7BfoEPAX7BPoEOwU8BfsEPQX8BPsEPAU9BfwEPgX9BPwEPQU+Bf0EPwX+BP0EPgU/Bf4EQAX/BP4EPwVABf8EQQUABf8EQAVBBQAFQgUBBQAFQQVCBQEFQwUCBQEFQgVDBQIFRAUDBQIFQwVEBQMFRQUEBQMFRAVFBQQFRgUFBQQFRQVGBQUFRwUGBQUFRgVHBQYFSAUHBQYFRwVIBQcFSQUIBQcFSAVJBQgFSgUJBQgFSQVKBQkFSwUKBQkFSgVLBQoFTAULBQoFSwVMBQsFTQUMBQsFTAVNBQwFTgUNBQwFTQVOBQ0FTwUOBQ0FTgVPBQ4FUAUPBQ4FTwVQBQ8FUQUQBQ8FUAVRBRAFUgURBRAFUQVSBREFUwUSBREFUgVTBRIFVAUTBRIFUwVUBRQFVgUVBRQFVQVWBRUFVwUWBRUFVgVXBRYFWAUXBRYFVwVYBRcFWQUYBRcFWAVZBRgFWgUZBRgFWQVaBRkFWwUaBRkFWgVbBRoFXAUbBRoFWwVcBRsFXQUcBRsFXAVdBRwFXgUdBRwFXQVeBR0FXwUeBR0FXgVfBR4FYAUfBR4FXwVgBR8FYQUgBR8FYAVhBSAFYgUhBSAFYQViBSEFYwUiBSEFYgVjBSIFZAUjBSIFYwVkBSMFZQUkBSMFZAVlBSQFZgUlBSQFZQVmBSUFZwUmBSUFZgVnBSYFaAUnBSYFZwVoBScFaQUoBScFaAVpBSgFagUpBSgFaQVqBSkFawUqBSkFagVrBSoFbAUrBSoFawVsBSsFbQUsBSsFbAVtBSwFbgUtBSwFbQVuBS0FbwUuBS0FbgVvBS4FcAUvBS4FbwVwBS8FcQUwBS8FcAVxBTAFcgUxBTAFcQVyBTEFcwUyBTEFcgVzBTIFdAUzBTIFcwV0BTMFdQU0BTMFdAV1BTQFdgU1BTQFdQV2BTUFdwU2BTUFdgV3BTYFeAU3BTYFdwV4BTcFeQU4BTcFeAV5BTgFegU5BTgFeQV6BTkFewU6BTkFegV7BToFfAU7BToFewV8BTsFfQU8BTsFfAV9BTwFfgU9BTwFfQV+BT0FfwU+BT0FfgV/BT4FgAU/BT4FfwWABT8FgQVABT8FgAWBBUAFggVBBUAFgQWCBUEFgwVCBUEFggWDBUIFhAVDBUIFgwWEBUMFhQVEBUMFhAWFBUQFhgVFBUQFhQWGBUUFhwVGBUUFhgWHBUYFiAVHBUYFhwWIBUcFiQVIBUcFiAWJBUgFigVJBUgFiQWKBUkFiwVKBUkFigWLBUoFjAVLBUoFiwWMBUsFjQVMBUsFjAWNBUwFjgVNBUwFjQWOBU0FjwVOBU0FjgWPBU4FkAVPBU4FjwWQBU8FkQVQBU8FkAWRBVAFkgVRBVAFkQWSBVEFkwVSBVEFkgWTBVIFlAVTBVIFkwWUBVMFlQVUBVMFlAWVBVUFlwVWBVUFlgWXBVYFmAVXBVYFlwWYBVcFmQVYBVcFmAWZBVgFmgVZBVgFmQWaBVkFmwVaBVkFmgWbBVoFnAVbBVoFmwWcBVsFnQVcBVsFnAWdBVwFngVdBVwFnQWeBV0FnwVeBV0FngWfBV4FoAVfBV4FnwWgBV8FoQVgBV8FoAWhBWAFogVhBWAFoQWiBWEFowViBWEFogWjBWIFpAVjBWIFowWkBWMFpQVkBWMFpAWlBWQFpgVlBWQFpQWmBWUFpwVmBWUFpgWnBWYFqAVnBWYFpwWoBWcFqQVoBWcFqAWpBWgFqgVpBWgFqQWqBWkFqwVqBWkFqgWrBWoFrAVrBWoFqwWsBWsFrQVsBWsFrAWtBWwFrgVtBWwFrQWuBW0FrwVuBW0FrgWvBW4FsAVvBW4FrwWwBW8FsQVwBW8FsAWxBXAFsgVxBXAFsQWyBXEFswVyBXEFsgWzBXIFtAVzBXIFswW0BXMFtQV0BXMFtAW1BXQFtgV1BXQFtQW2BXUFtwV2BXUFtgW3BXYFuAV3BXYFtwW4BXcFuQV4BXcFuAW5BXgFugV5BXgFuQW6BXkFuwV6BXkFugW7BXoFvAV7BXoFuwW8BXsFvQV8BXsFvAW9BXwFvgV9BXwFvQW+BX0FvwV+BX0FvgW/BX4FwAV/BX4FvwXABX8FwQWABX8FwAXBBYAFwgWBBYAFwQXCBYEFwwWCBYEFwgXDBYIFxAWDBYIFwwXEBYMFxQWEBYMFxAXFBYQFxgWFBYQFxQXGBYUFxwWGBYUFxgXHBYYFyAWHBYYFxwXIBYcFyQWIBYcFyAXJBYgFygWJBYgFyQXKBYkFywWKBYkFygXLBYoFzAWLBYoFywXMBYsFzQWMBYsFzAXNBYwFzgWNBYwFzQXOBY0FzwWOBY0FzgXPBY4F0AWPBY4FzwXQBY8F0QWQBY8F0AXRBZAF0gWRBZAF0QXSBZEF0wWSBZEF0gXTBZIF1AWTBZIF0wXUBZMF1QWUBZMF1AXVBZQF1gWVBZQF1QXWBZYF2AWXBZYF1wXYBZcF2QWYBZcF2AXZBZgF2gWZBZgF2QXaBZkF2wWaBZkF2gXbBZoF3AWbBZoF2wXcBZsF3QWcBZsF3AXdBZwF3gWdBZwF3QXeBZ0F3wWeBZ0F3gXfBZ4F4AWfBZ4F3wXgBZ8F4QWgBZ8F4AXhBaAF4gWhBaAF4QXiBaEF4wWiBaEF4gXjBaIF5AWjBaIF4wXkBaMF5QWkBaMF5AXlBaQF5gWlBaQF5QXmBaUF5wWmBaUF5gXnBaYF6AWnBaYF5wXoBacF6QWoBacF6AXpBagF6gWpBagF6QXqBakF6wWqBakF6gXrBaoF7AWrBaoF6wXsBasF7QWsBasF7AXtBawF7gWtBawF7QXuBa0F7wWuBa0F7gXvBa4F8AWvBa4F7wXwBa8F8QWwBa8F8AXxBbAF8gWxBbAF8QXyBbEF8wWyBbEF8gXzBbIF9AWzBbIF8wX0BbMF9QW0BbMF9AX1BbQF9gW1BbQF9QX2BbUF9wW2BbUF9gX3BbYF+AW3BbYF9wX4BbcF+QW4BbcF+AX5BbgF+gW5BbgF+QX6BbkF+wW6BbkF+gX7BboF/AW7BboF+wX8BbsF/QW8BbsF/AX9BbwF/gW9BbwF/QX+Bb0F/wW+Bb0F/gX/Bb4FAAa/Bb4F/wUABr8FAQbABb8FAAYBBsAFAgbBBcAFAQYCBsEFAwbCBcEFAgYDBsIFBAbDBcIFAwYEBsMFBQbEBcMFBAYFBsQFBgbFBcQFBQYGBsUFBwbGBcUFBgYHBsYFCAbHBcYFBwYIBscFCQbIBccFCAYJBsgFCgbJBcgFCQYKBskFCwbKBckFCgYLBsoFDAbLBcoFCwYMBssFDQbMBcsFDAYNBswFDgbNBcwFDQYOBs0FDwbOBc0FDgYPBs4FEAbPBc4FDwYQBs8FEQbQBc8FEAYRBtAFEgbRBdAFEQYSBtEFEwbSBdEFEgYTBtIFFAbTBdIFEwYUBtMFFQbUBdMFFAYVBtQFFgbVBdQFFQYWBtUFFwbWBdUFFgYXBtcFGQbYBdcFGAYZBtgFGgbZBdgFGQYaBtkFGwbaBdkFGgYbBtoFHAbbBdoFGwYcBtsFHQbcBdsFHAYdBtwFHgbdBdwFHQYeBt0FHwbeBd0FHgYfBt4FIAbfBd4FHwYgBt8FIQbgBd8FIAYhBuAFIgbhBeAFIQYiBuEFIwbiBeEFIgYjBuIFJAbjBeIFIwYkBuMFJQbkBeMFJAYlBuQFJgblBeQFJQYmBuUFJwbmBeUFJgYnBuYFKAbnBeYFJwYoBucFKQboBecFKAYpBugFKgbpBegFKQYqBukFKwbqBekFKgYrBuoFLAbrBeoFKwYsBusFLQbsBesFLAYtBuwFLgbtBewFLQYuBu0FLwbuBe0FLgYvBu4FMAbvBe4FLwYwBu8FMQbwBe8FMAYxBvAFMgbxBfAFMQYyBvEFMwbyBfEFMgYzBvIFNAbzBfIFMwY0BvMFNQb0BfMFNAY1BvQFNgb1BfQFNQY2BvUFNwb2BfUFNgY3BvYFOAb3BfYFNwY4BvcFOQb4BfcFOAY5BvgFOgb5BfgFOQY6BvkFOwb6BfkFOgY7BvoFPAb7BfoFOwY8BvsFPQb8BfsFPAY9BvwFPgb9BfwFPQY+Bv0FPwb+Bf0FPgY/Bv4FQAb/Bf4FPwZABv8FQQYABv8FQAZBBgAGQgYBBgAGQQZCBgEGQwYCBgEGQgZDBgIGRAYDBgIGQwZEBgMGRQYEBgMGRAZFBgQGRgYFBgQGRQZGBgUGRwYGBgUGRgZHBgYGSAYHBgYGRwZIBgcGSQYIBgcGSAZJBggGSgYJBggGSQZKBgkGSwYKBgkGSgZLBgoGTAYLBgoGSwZMBgsGTQYMBgsGTAZNBgwGTgYNBgwGTQZOBg0GTwYOBg0GTgZPBg4GUAYPBg4GTwZQBg8GUQYQBg8GUAZRBhAGUgYRBhAGUQZSBhEGUwYSBhEGUgZTBhIGVAYTBhIGUwZUBhMGVQYUBhMGVAZVBhQGVgYVBhQGVQZWBhUGVwYWBhUGVgZXBhYGWAYXBhYGVwZYBhgGWgYZBhgGWQZaBhkGWwYaBhkGWgZbBhoGXAYbBhoGWwZcBhsGXQYcBhsGXAZdBhwGXgYdBhwGXQZeBh0GXwYeBh0GXgZfBh4GYAYfBh4GXwZgBh8GYQYgBh8GYAZhBiAGYgYhBiAGYQZiBiEGYwYiBiEGYgZjBiIGZAYjBiIGYwZkBiMGZQYkBiMGZAZlBiQGZgYlBiQGZQZmBiUGZwYmBiUGZgZnBiYGaAYnBiYGZwZoBicGaQYoBicGaAZpBigGagYpBigGaQZqBikGawYqBikGagZrBioGbAYrBioGawZsBisGbQYsBisGbAZtBiwGbgYtBiwGbQZuBi0GbwYuBi0GbgZvBi4GcAYvBi4GbwZwBi8GcQYwBi8GcAZxBjAGcgYxBjAGcQZyBjEGcwYyBjEGcgZzBjIGdAYzBjIGcwZ0BjMGdQY0BjMGdAZ1BjQGdgY1BjQGdQZ2BjUGdwY2BjUGdgZ3BjYGeAY3BjYGdwZ4BjcGeQY4BjcGeAZ5BjgGegY5BjgGeQZ6BjkGewY6BjkGegZ7BjoGfAY7BjoGewZ8BjsGfQY8BjsGfAZ9BjwGfgY9BjwGfQZ+Bj0GfwY+Bj0GfgZ/Bj4GgAY/Bj4GfwaABj8GgQZABj8GgAaBBkAGggZBBkAGgQaCBkEGgwZCBkEGggaDBkIGhAZDBkIGgwaEBkMGhQZEBkMGhAaFBkQGhgZFBkQGhQaGBkUGhwZGBkUGhgaHBkYGiAZHBkYGhwaIBkcGiQZIBkcGiAaJBkgGigZJBkgGiQaKBkkGiwZKBkkGigaLBkoGjAZLBkoGiwaMBksGjQZMBksGjAaNBkwGjgZNBkwGjQaOBk0GjwZOBk0GjgaPBk4GkAZPBk4GjwaQBk8GkQZQBk8GkAaRBlAGkgZRBlAGkQaSBlEGkwZSBlEGkgaTBlIGlAZTBlIGkwaUBlMGlQZUBlMGlAaVBlQGlgZVBlQGlQaWBlUGlwZWBlUGlgaXBlYGmAZXBlYGlwaYBlcGmQZYBlcGmAaZBlkGmwZaBlkGmgabBloGnAZbBloGmwacBlsGnQZcBlsGnAadBlwGngZdBlwGnQaeBl0GnwZeBl0GngafBl4GoAZfBl4GnwagBl8GoQZgBl8GoAahBmAGogZhBmAGoQaiBmEGowZiBmEGogajBmIGpAZjBmIGowakBmMGpQZkBmMGpAalBmQGpgZlBmQGpQamBmUGpwZmBmUGpganBmYGqAZnBmYGpwaoBmcGqQZoBmcGqAapBmgGqgZpBmgGqQaqBmkGqwZqBmkGqgarBmoGrAZrBmoGqwasBmsGrQZsBmsGrAatBmwGrgZtBmwGrQauBm0GrwZuBm0GrgavBm4GsAZvBm4GrwawBm8GsQZwBm8GsAaxBnAGsgZxBnAGsQayBnEGswZyBnEGsgazBnIGtAZzBnIGswa0BnMGtQZ0BnMGtAa1BnQGtgZ1BnQGtQa2BnUGtwZ2BnUGtga3BnYGuAZ3BnYGtwa4BncGuQZ4BncGuAa5BngGugZ5BngGuQa6BnkGuwZ6BnkGuga7BnoGvAZ7BnoGuwa8BnsGvQZ8BnsGvAa9BnwGvgZ9BnwGvQa+Bn0GvwZ+Bn0Gvga/Bn4GwAZ/Bn4GvwbABn8GwQaABn8GwAbBBoAGwgaBBoAGwQbCBoEGwwaCBoEGwgbDBoIGxAaDBoIGwwbEBoMGxQaEBoMGxAbFBoQGxgaFBoQGxQbGBoUGxwaGBoUGxgbHBoYGyAaHBoYGxwbIBocGyQaIBocGyAbJBogGygaJBogGyQbKBokGywaKBokGygbLBooGzAaLBooGywbMBosGzQaMBosGzAbNBowGzgaNBowGzQbOBo0GzwaOBo0GzgbPBo4G0AaPBo4GzwbQBo8G0QaQBo8G0AbRBpAG0gaRBpAG0QbSBpEG0waSBpEG0gbTBpIG1AaTBpIG0wbUBpMG1QaUBpMG1AbVBpQG1gaVBpQG1QbWBpUG1waWBpUG1gbXBpYG2AaXBpYG1wbYBpcG2QaYBpcG2AbZBpgG2gaZBpgG2QbaBpoG3AabBpoG2wbcBpsG3QacBpsG3AbdBpwG3gadBpwG3QbeBp0G3waeBp0G3gbfBp4G4AafBp4G3wbgBp8G4QagBp8G4AbhBqAG4gahBqAG4QbiBqEG4waiBqEG4gbjBqIG5AajBqIG4wbkBqMG5QakBqMG5AblBqQG5galBqQG5QbmBqUG5wamBqUG5gbnBqYG6AanBqYG5wboBqcG6QaoBqcG6AbpBqgG6gapBqgG6QbqBqkG6waqBqkG6gbrBqoG7AarBqoG6wbsBqsG7QasBqsG7AbtBqwG7gatBqwG7QbuBq0G7wauBq0G7gbvBq4G8AavBq4G7wbwBq8G8QawBq8G8AbxBrAG8gaxBrAG8QbyBrEG8wayBrEG8gbzBrIG9AazBrIG8wb0BrMG9Qa0BrMG9Ab1BrQG9ga1BrQG9Qb2BrUG9wa2BrUG9gb3BrYG+Aa3BrYG9wb4BrcG+Qa4BrcG+Ab5BrgG+ga5BrgG+Qb6BrkG+wa6BrkG+gb7BroG/Aa7BroG+wb8BrsG/Qa8BrsG/Ab9BrwG/ga9BrwG/Qb+Br0G/wa+Br0G/gb/Br4GAAe/Br4G/wYAB78GAQfABr8GAAcBB8AGAgfBBsAGAQcCB8EGAwfCBsEGAgcDB8IGBAfDBsIGAwcEB8MGBQfEBsMGBAcFB8QGBgfFBsQGBQcGB8UGBwfGBsUGBgcHB8YGCAfHBsYGBwcIB8cGCQfIBscGCAcJB8gGCgfJBsgGCQcKB8kGCwfKBskGCgcLB8oGDAfLBsoGCwcMB8sGDQfMBssGDAcNB8wGDgfNBswGDQcOB80GDwfOBs0GDgcPB84GEAfPBs4GDwcQB88GEQfQBs8GEAcRB9AGEgfRBtAGEQcSB9EGEwfSBtEGEgcTB9IGFAfTBtIGEwcUB9MGFQfUBtMGFAcVB9QGFgfVBtQGFQcWB9UGFwfWBtUGFgcXB9YGGAfXBtYGFwcYB9cGGQfYBtcGGAcZB9gGGgfZBtgGGQcaB9kGGwfaBtkGGgcbB9sGHQfcBtsGHAcdB9wGHgfdBtwGHQceB90GHwfeBt0GHgcfB94GIAffBt4GHwcgB98GIQfgBt8GIAchB+AGIgfhBuAGIQciB+EGIwfiBuEGIgcjB+IGJAfjBuIGIwckB+MGJQfkBuMGJAclB+QGJgflBuQGJQcmB+UGJwfmBuUGJgcnB+YGKAfnBuYGJwcoB+cGKQfoBucGKAcpB+gGKgfpBugGKQcqB+kGKwfqBukGKgcrB+oGLAfrBuoGKwcsB+sGLQfsBusGLActB+wGLgftBuwGLQcuB+0GLwfuBu0GLgcvB+4GMAfvBu4GLwcwB+8GMQfwBu8GMAcxB/AGMgfxBvAGMQcyB/EGMwfyBvEGMgczB/IGNAfzBvIGMwc0B/MGNQf0BvMGNAc1B/QGNgf1BvQGNQc2B/UGNwf2BvUGNgc3B/YGOAf3BvYGNwc4B/cGOQf4BvcGOAc5B/gGOgf5BvgGOQc6B/kGOwf6BvkGOgc7B/oGPAf7BvoGOwc8B/sGPQf8BvsGPAc9B/wGPgf9BvwGPQc+B/0GPwf+Bv0GPgc/B/4GQAf/Bv4GPwdAB/8GQQcAB/8GQAdBBwAHQgcBBwAHQQdCBwEHQwcCBwEHQgdDBwIHRAcDBwIHQwdEBwMHRQcEBwMHRAdFBwQHRgcFBwQHRQdGBwUHRwcGBwUHRgdHBwYHSAcHBwYHRwdIBwcHSQcIBwcHSAdJBwgHSgcJBwgHSQdKBwkHSwcKBwkHSgdLBwoHTAcLBwoHSwdMBwsHTQcMBwsHTAdNBwwHTgcNBwwHTQdOBw0HTwcOBw0HTgdPBw4HUAcPBw4HTwdQBw8HUQcQBw8HUAdRBxAHUgcRBxAHUQdSBxEHUwcSBxEHUgdTBxIHVAcTBxIHUwdUBxMHVQcUBxMHVAdVBxQHVgcVBxQHVQdWBxUHVwcWBxUHVgdXBxYHWAcXBxYHVwdYBxcHWQcYBxcHWAdZBxgHWgcZBxgHWQdaBxkHWwcaBxkHWgdbBxoHXAcbBxoHWwdcBxwHXgcdBxwHXQdeBx0HXwceBx0HXgdfBx4HYAcfBx4HXwdgBx8HYQcgBx8HYAdhByAHYgchByAHYQdiByEHYwciByEHYgdjByIHZAcjByIHYwdkByMHZQckByMHZAdlByQHZgclByQHZQdmByUHZwcmByUHZgdnByYHaAcnByYHZwdoBycHaQcoBycHaAdpBygHagcpBygHaQdqBykHawcqBykHagdrByoHbAcrByoHawdsBysHbQcsBysHbAdtBywHbgctBywHbQduBy0HbwcuBy0HbgdvBy4HcAcvBy4HbwdwBy8HcQcwBy8HcAdxBzAHcgcxBzAHcQdyBzEHcwcyBzEHcgdzBzIHdAczBzIHcwd0BzMHdQc0BzMHdAd1BzQHdgc1BzQHdQd2BzUHdwc2BzUHdgd3BzYHeAc3BzYHdwd4BzcHeQc4BzcHeAd5BzgHegc5BzgHeQd6BzkHewc6BzkHegd7BzoHfAc7BzoHewd8BzsHfQc8BzsHfAd9BzwHfgc9BzwHfQd+Bz0Hfwc+Bz0Hfgd/Bz4HgAc/Bz4HfweABz8HgQdABz8HgAeBB0AHggdBB0AHgQeCB0EHgwdCB0EHggeDB0IHhAdDB0IHgweEB0MHhQdEB0MHhAeFB0QHhgdFB0QHhQeGB0UHhwdGB0UHhgeHB0YHiAdHB0YHhweIB0cHiQdIB0cHiAeJB0gHigdJB0gHiQeKB0kHiwdKB0kHigeLB0oHjAdLB0oHiweMB0sHjQdMB0sHjAeNB0wHjgdNB0wHjQeOB00HjwdOB00HjgePB04HkAdPB04HjweQB08HkQdQB08HkAeRB1AHkgdRB1AHkQeSB1EHkwdSB1EHkgeTB1IHlAdTB1IHkweUB1MHlQdUB1MHlAeVB1QHlgdVB1QHlQeWB1UHlwdWB1UHlgeXB1YHmAdXB1YHlweYB1cHmQdYB1cHmAeZB1gHmgdZB1gHmQeaB1kHmwdaB1kHmgebB1oHnAdbB1oHmwecB1sHnQdcB1sHnAedB10HnwdeB10HngefB14HoAdfB14HnwegB18HoQdgB18HoAehB2AHogdhB2AHoQeiB2EHowdiB2EHogejB2IHpAdjB2IHowekB2MHpQdkB2MHpAelB2QHpgdlB2QHpQemB2UHpwdmB2UHpgenB2YHqAdnB2YHpweoB2cHqQdoB2cHqAepB2gHqgdpB2gHqQeqB2kHqwdqB2kHqgerB2oHrAdrB2oHqwesB2sHrQdsB2sHrAetB2wHrgdtB2wHrQeuB20HrwduB20HrgevB24HsAdvB24HrwewB28HsQdwB28HsAexB3AHsgdxB3AHsQeyB3EHswdyB3EHsgezB3IHtAdzB3IHswe0B3MHtQd0B3MHtAe1B3QHtgd1B3QHtQe2B3UHtwd2B3UHtge3B3YHuAd3B3YHtwe4B3cHuQd4B3cHuAe5B3gHugd5B3gHuQe6B3kHuwd6B3kHuge7B3oHvAd7B3oHuwe8B3sHvQd8B3sHvAe9B3wHvgd9B3wHvQe+B30Hvwd+B30Hvge/B34HwAd/B34HvwfAB38HwQeAB38HwAfBB4AHwgeBB4AHwQfCB4EHwweCB4EHwgfDB4IHxAeDB4IHwwfEB4MHxQeEB4MHxAfFB4QHxgeFB4QHxQfGB4UHxweGB4UHxgfHB4YHyAeHB4YHxwfIB4cHyQeIB4cHyAfJB4gHygeJB4gHyQfKB4kHyweKB4kHygfLB4oHzAeLB4oHywfMB4sHzQeMB4sHzAfNB4wHzgeNB4wHzQfOB40HzweOB40HzgfPB44H0AePB44HzwfQB48H0QeQB48H0AfRB5AH0geRB5AH0QfSB5EH0weSB5EH0gfTB5IH1AeTB5IH0wfUB5MH1QeUB5MH1AfVB5QH1geVB5QH1QfWB5UH1weWB5UH1gfXB5YH2AeXB5YH1wfYB5cH2QeYB5cH2AfZB5gH2geZB5gH2QfaB5kH2weaB5kH2gfbB5oH3AebB5oH2wfcB5sH3QecB5sH3AfdB5wH3gedB5wH3QfeB54H4AefB54H3wfgB58H4QegB58H4AfhB6AH4gehB6AH4QfiB6EH4weiB6EH4gfjB6IH5AejB6IH4wfkB6MH5QekB6MH5AflB6QH5gelB6QH5QfmB6UH5wemB6UH5gfnB6YH6AenB6YH5wfoB6cH6QeoB6cH6AfpB6gH6gepB6gH6QfqB6kH6weqB6kH6gfrB6oH7AerB6oH6wfsB6sH7QesB6sH7AftB6wH7getB6wH7QfuB60H7weuB60H7gfvB64H8AevB64H7wfwB68H8QewB68H8AfxB7AH8gexB7AH8QfyB7EH8weyB7EH8gfzB7IH9AezB7IH8wf0B7MH9Qe0B7MH9Af1B7QH9ge1B7QH9Qf2B7UH9we2B7UH9gf3B7YH+Ae3B7YH9wf4B7cH+Qe4B7cH+Af5B7gH+ge5B7gH+Qf6B7kH+we6B7kH+gf7B7oH/Ae7B7oH+wf8B7sH/Qe8B7sH/Af9B7wH/ge9B7wH/Qf+B70H/we+B70H/gf/B74HAAi/B74H/wcACL8HAQjAB78HAAgBCMAHAgjBB8AHAQgCCMEHAwjCB8EHAggDCMIHBAjDB8IHAwgECMMHBQjEB8MHBAgFCMQHBgjFB8QHBQgGCMUHBwjGB8UHBggHCMYHCAjHB8YHBwgICMcHCQjIB8cHCAgJCMgHCgjJB8gHCQgKCMkHCwjKB8kHCggLCMoHDAjLB8oHCwgMCMsHDQjMB8sHDAgNCMwHDgjNB8wHDQgOCM0HDwjOB80HDggPCM4HEAjPB84HDwgQCM8HEQjQB88HEAgRCNAHEgjRB9AHEQgSCNEHEwjSB9EHEggTCNIHFAjTB9IHEwgUCNMHFQjUB9MHFAgVCNQHFgjVB9QHFQgWCNUHFwjWB9UHFggXCNYHGAjXB9YHFwgYCNcHGQjYB9cHGAgZCNgHGgjZB9gHGQgaCNkHGwjaB9kHGggbCNoHHAjbB9oHGwgcCNsHHQjcB9sHHAgdCNwHHgjdB9wHHQgeCN0HHwjeB90HHggfCN8HIQjgB98HIAghCOAHIgjhB+AHIQgiCOEHIwjiB+EHIggjCOIHJAjjB+IHIwgkCOMHJQjkB+MHJAglCOQHJgjlB+QHJQgmCOUHJwjmB+UHJggnCOYHKAjnB+YHJwgoCOcHKQjoB+cHKAgpCOgHKgjpB+gHKQgqCOkHKwjqB+kHKggrCOoHLAjrB+oHKwgsCOsHLQjsB+sHLAgtCOwHLgjtB+wHLQguCO0HLwjuB+0HLggvCO4HMAjvB+4HLwgwCO8HMQjwB+8HMAgxCPAHMgjxB/AHMQgyCPEHMwjyB/EHMggzCPIHNAjzB/IHMwg0CPMHNQj0B/MHNAg1CPQHNgj1B/QHNQg2CPUHNwj2B/UHNgg3CPYHOAj3B/YHNwg4CPcHOQj4B/cHOAg5CPgHOgj5B/gHOQg6CPkHOwj6B/kHOgg7CPoHPAj7B/oHOwg8CPsHPQj8B/sHPAg9CPwHPgj9B/wHPQg+CP0HPwj+B/0HPgg/CP4HQAj/B/4HPwhACP8HQQgACP8HQAhBCAAIQggBCAAIQQhCCAEIQwgCCAEIQghDCAIIRAgDCAIIQwhECAMIRQgECAMIRAhFCAQIRggFCAQIRQhGCAUIRwgGCAUIRghHCAYISAgHCAYIRwhICAcISQgICAcISAhJCAgISggJCAgISQhKCAkISwgKCAkISghLCAoITAgLCAoISwhMCAsITQgMCAsITAhNCAwITggNCAwITQhOCA0ITwgOCA0ITghPCA4IUAgPCA4ITwhQCA8IUQgQCA8IUAhRCBAIUggRCBAIUQhSCBEIUwgSCBEIUghTCBIIVAgTCBIIUwhUCBMIVQgUCBMIVAhVCBQIVggVCBQIVQhWCBUIVwgWCBUIVghXCBYIWAgXCBYIVwhYCBcIWQgYCBcIWAhZCBgIWggZCBgIWQhaCBkIWwgaCBkIWghbCBoIXAgbCBoIWwhcCBsIXQgcCBsIXAhdCBwIXggdCBwIXQheCB0IXwgeCB0IXghfCB4IYAgfCB4IXwhgCCAIYgghCCAIYQhiCCEIYwgiCCEIYghjCCIIZAgjCCIIYwhkCCMIZQgkCCMIZAhlCCQIZgglCCQIZQhmCCUIZwgmCCUIZghnCCYIaAgnCCYIZwhoCCcIaQgoCCcIaAhpCCgIaggpCCgIaQhqCCkIawgqCCkIaghrCCoIbAgrCCoIawhsCCsIbQgsCCsIbAhtCCwIbggtCCwIbQhuCC0IbwguCC0IbghvCC4IcAgvCC4IbwhwCC8IcQgwCC8IcAhxCDAIcggxCDAIcQhyCDEIcwgyCDEIcghzCDIIdAgzCDIIcwh0CDMIdQg0CDMIdAh1CDQIdgg1CDQIdQh2CDUIdwg2CDUIdgh3CDYIeAg3CDYIdwh4CDcIeQg4CDcIeAh5CDgIegg5CDgIeQh6CDkIewg6CDkIegh7CDoIfAg7CDoIewh8CDsIfQg8CDsIfAh9CDwIfgg9CDwIfQh+CD0Ifwg+CD0Ifgh/CD4IgAg/CD4IfwiACD8IgQhACD8IgAiBCEAIgghBCEAIgQiCCEEIgwhCCEEIggiDCEIIhAhDCEIIgwiECEMIhQhECEMIhAiFCEQIhghFCEQIhQiGCEUIhwhGCEUIhgiHCEYIiAhHCEYIhwiICEcIiQhICEcIiAiJCEgIighJCEgIiQiKCEkIiwhKCEkIigiLCEoIjAhLCEoIiwiMCEsIjQhMCEsIjAiNCEwIjghNCEwIjQiOCE0IjwhOCE0IjgiPCE4IkAhPCE4IjwiQCE8IkQhQCE8IkAiRCFAIkghRCFAIkQiSCFEIkwhSCFEIkgiTCFIIlAhTCFIIkwiUCFMIlQhUCFMIlAiVCFQIlghVCFQIlQiWCFUIlwhWCFUIlgiXCFYImAhXCFYIlwiYCFcImQhYCFcImAiZCFgImghZCFgImQiaCFkImwhaCFkImgibCFoInAhbCFoImwicCFsInQhcCFsInAidCFwInghdCFwInQieCF0InwheCF0IngifCF4IoAhfCF4InwigCF8IoQhgCF8IoAihCGEIowhiCGEIogijCGIIpAhjCGIIowikCGMIpQhkCGMIpAilCGQIpghlCGQIpQimCGUIpwhmCGUIpginCGYIqAhnCGYIpwioCGcIqQhoCGcIqAipCGgIqghpCGgIqQiqCGkIqwhqCGkIqgirCGoIrAhrCGoIqwisCGsIrQhsCGsIrAitCGwIrghtCGwIrQiuCG0IrwhuCG0IrgivCG4IsAhvCG4IrwiwCG8IsQhwCG8IsAixCHAIsghxCHAIsQiyCHEIswhyCHEIsgizCHIItAhzCHIIswi0CHMItQh0CHMItAi1CHQItgh1CHQItQi2CHUItwh2CHUItgi3CHYIuAh3CHYItwi4CHcIuQh4CHcIuAi5CHgIugh5CHgIuQi6CHkIuwh6CHkIugi7CHoIvAh7CHoIuwi8CHsIvQh8CHsIvAi9CHwIvgh9CHwIvQi+CH0Ivwh+CH0Ivgi/CH4IwAh/CH4IvwjACH8IwQiACH8IwAjBCIAIwgiBCIAIwQjCCIEIwwiCCIEIwgjDCIIIxAiDCIIIwwjECIMIxQiECIMIxAjFCIQIxgiFCIQIxQjGCIUIxwiGCIUIxgjHCIYIyAiHCIYIxwjICIcIyQiICIcIyAjJCIgIygiJCIgIyQjKCIkIywiKCIkIygjLCIoIzAiLCIoIywjMCIsIzQiMCIsIzAjNCIwIzgiNCIwIzQjOCI0IzwiOCI0IzgjPCI4I0AiPCI4IzwjQCI8I0QiQCI8I0AjRCJAI0giRCJAI0QjSCJEI0wiSCJEI0gjTCJII1AiTCJII0wjUCJMI1QiUCJMI1AjVCJQI1giVCJQI1QjWCJUI1wiWCJUI1gjXCJYI2AiXCJYI1wjYCJcI2QiYCJcI2AjZCJgI2giZCJgI2QjaCJkI2wiaCJkI2gjbCJoI3AibCJoI2wjcCJsI3QicCJsI3AjdCJwI3gidCJwI3QjeCJ0I3wieCJ0I3gjfCJ4I4AifCJ4I3wjgCJ8I4QigCJ8I4AjhCKAI4gihCKAI4QjiCKII5AijCKII4wjkCKMI5QikCKMI5AjlCKQI5gilCKQI5QjmCKUI5wimCKUI5gjnCKYI6AinCKYI5wjoCKcI6QioCKcI6AjpCKgI6gipCKgI6QjqCKkI6wiqCKkI6gjrCKoI7AirCKoI6wjsCKsI7QisCKsI7AjtCKwI7gitCKwI7QjuCK0I7wiuCK0I7gjvCK4I8AivCK4I7wjwCK8I8QiwCK8I8AjxCLAI8gixCLAI8QjyCLEI8wiyCLEI8gjzCLII9AizCLII8wj0CLMI9Qi0CLMI9Aj1CLQI9gi1CLQI9Qj2CLUI9wi2CLUI9gj3CLYI+Ai3CLYI9wj4CLcI+Qi4CLcI+Aj5CLgI+gi5CLgI+Qj6CLkI+wi6CLkI+gj7CLoI/Ai7CLoI+wj8CLsI/Qi8CLsI/Aj9CLwI/gi9CLwI/Qj+CL0I/wi+CL0I/gj/CL4IAAm/CL4I/wgACb8IAQnACL8IAAkBCcAIAgnBCMAIAQkCCcEIAwnCCMEIAgkDCcIIBAnDCMIIAwkECcMIBQnECMMIBAkFCcQIBgnFCMQIBQkGCcUIBwnGCMUIBgkHCcYICAnHCMYIBwkICccICQnICMcICAkJCcgICgnJCMgICQkKCckICwnKCMkICgkLCcoIDAnLCMoICwkMCcsIDQnMCMsIDAkNCcwIDgnNCMwIDQkOCc0IDwnOCM0IDgkPCc4IEAnPCM4IDwkQCc8IEQnQCM8IEAkRCdAIEgnRCNAIEQkSCdEIEwnSCNEIEgkTCdIIFAnTCNIIEwkUCdMIFQnUCNMIFAkVCdQIFgnVCNQIFQkWCdUIFwnWCNUIFgkXCdYIGAnXCNYIFwkYCdcIGQnYCNcIGAkZCdgIGgnZCNgIGQkaCdkIGwnaCNkIGgkbCdoIHAnbCNoIGwkcCdsIHQncCNsIHAkdCdwIHgndCNwIHQkeCd0IHwneCN0IHgkfCd4IIAnfCN4IHwkgCd8IIQngCN8IIAkhCeAIIgnhCOAIIQkiCeEIIwniCOEIIgkjCeMIJQnkCOMIJAklCeQIJgnlCOQIJQkmCeUIJwnmCOUIJgknCeYIKAnnCOYIJwkoCecIKQnoCOcIKAkpCegIKgnpCOgIKQkqCekIKwnqCOkIKgkrCeoILAnrCOoIKwksCesILQnsCOsILAktCewILgntCOwILQkuCe0ILwnuCO0ILgkvCe4IMAnvCO4ILwkwCe8IMQnwCO8IMAkxCfAIMgnxCPAIMQkyCfEIMwnyCPEIMgkzCfIINAnzCPIIMwk0CfMINQn0CPMINAk1CfQINgn1CPQINQk2CfUINwn2CPUINgk3CfYIOAn3CPYINwk4CfcIOQn4CPcIOAk5CfgIOgn5CPgIOQk6CfkIOwn6CPkIOgk7CfoIPAn7CPoIOwk8CfsIPQn8CPsIPAk9CfwIPgn9CPwIPQk+Cf0IPwn+CP0IPgk/Cf4IQAn/CP4IPwlACf8IQQkACf8IQAlBCQAJQgkBCQAJQQlCCQEJQwkCCQEJQglDCQIJRAkDCQIJQwlECQMJRQkECQMJRAlFCQQJRgkFCQQJRQlGCQUJRwkGCQUJRglHCQYJSAkHCQYJRwlICQcJSQkICQcJSAlJCQgJSgkJCQgJSQlKCQkJSwkKCQkJSglLCQoJTAkLCQoJSwlMCQsJTQkMCQsJTAlNCQwJTgkNCQwJTQlOCQ0JTwkOCQ0JTglPCQ4JUAkPCQ4JTwlQCQ8JUQkQCQ8JUAlRCRAJUgkRCRAJUQlSCREJUwkSCREJUglTCRIJVAkTCRIJUwlUCRMJVQkUCRMJVAlVCRQJVgkVCRQJVQlWCRUJVwkWCRUJVglXCRYJWAkXCRYJVwlYCRcJWQkYCRcJWAlZCRgJWgkZCRgJWQlaCRkJWwkaCRkJWglbCRoJXAkbCRoJWwlcCRsJXQkcCRsJXAldCRwJXgkdCRwJXQleCR0JXwkeCR0JXglfCR4JYAkfCR4JXwlgCR8JYQkgCR8JYAlhCSAJYgkhCSAJYQliCSEJYwkiCSEJYgljCSIJZAkjCSIJYwlkCSQJZgklCSQJZQlmCSUJZwkmCSUJZglnCSYJaAknCSYJZwloCScJaQkoCScJaAlpCSgJagkpCSgJaQlqCSkJawkqCSkJaglrCSoJbAkrCSoJawlsCSsJbQksCSsJbAltCSwJbgktCSwJbQluCS0JbwkuCS0JbglvCS4JcAkvCS4JbwlwCS8JcQkwCS8JcAlxCTAJcgkxCTAJcQlyCTEJcwkyCTEJcglzCTIJdAkzCTIJcwl0CTMJdQk0CTMJdAl1CTQJdgk1CTQJdQl2CTUJdwk2CTUJdgl3CTYJeAk3CTYJdwl4CTcJeQk4CTcJeAl5CTgJegk5CTgJeQl6CTkJewk6CTkJegl7CToJfAk7CToJewl8CTsJfQk8CTsJfAl9CTwJfgk9CTwJfQl+CT0Jfwk+CT0Jfgl/CT4JgAk/CT4JfwmACT8JgQlACT8JgAmBCUAJgglBCUAJgQmCCUEJgwlCCUEJggmDCUIJhAlDCUIJgwmECUMJhQlECUMJhAmFCUQJhglFCUQJhQmGCUUJhwlGCUUJhgmHCUYJiAlHCUYJhwmICUcJiQlICUcJiAmJCUgJiglJCUgJiQmKCUkJiwlKCUkJigmLCUoJjAlLCUoJiwmMCUsJjQlMCUsJjAmNCUwJjglNCUwJjQmOCU0JjwlOCU0JjgmPCU4JkAlPCU4JjwmQCU8JkQlQCU8JkAmRCVAJkglRCVAJkQmSCVEJkwlSCVEJkgmTCVIJlAlTCVIJkwmUCVMJlQlUCVMJlAmVCVQJlglVCVQJlQmWCVUJlwlWCVUJlgmXCVYJmAlXCVYJlwmYCVcJmQlYCVcJmAmZCVgJmglZCVgJmQmaCVkJmwlaCVkJmgmbCVoJnAlbCVoJmwmcCVsJnQlcCVsJnAmdCVwJngldCVwJnQmeCV0JnwleCV0JngmfCV4JoAlfCV4JnwmgCV8JoQlgCV8JoAmhCWAJoglhCWAJoQmiCWEJowliCWEJogmjCWIJpAljCWIJowmkCWMJpQlkCWMJpAmlCWUJpwlmCWUJpgmnCWYJqAlnCWYJpwmoCWcJqQloCWcJqAmpCWgJqglpCWgJqQmqCWkJqwlqCWkJqgmrCWoJrAlrCWoJqwmsCWsJrQlsCWsJrAmtCWwJrgltCWwJrQmuCW0JrwluCW0JrgmvCW4JsAlvCW4JrwmwCW8JsQlwCW8JsAmxCXAJsglxCXAJsQmyCXEJswlyCXEJsgmzCXIJtAlzCXIJswm0CXMJtQl0CXMJtAm1CXQJtgl1CXQJtQm2CXUJtwl2CXUJtgm3CXYJuAl3CXYJtwm4CXcJuQl4CXcJuAm5CXgJugl5CXgJuQm6CXkJuwl6CXkJugm7CXoJvAl7CXoJuwm8CXsJvQl8CXsJvAm9CXwJvgl9CXwJvQm+CX0Jvwl+CX0Jvgm/CX4JwAl/CX4JvwnACX8JwQmACX8JwAnBCYAJwgmBCYAJwQnCCYEJwwmCCYEJwgnDCYIJxAmDCYIJwwnECYMJxQmECYMJxAnFCYQJxgmFCYQJxQnGCYUJxwmGCYUJxgnHCYYJyAmHCYYJxwnICYcJyQmICYcJyAnJCYgJygmJCYgJyQnKCYkJywmKCYkJygnLCYoJzAmLCYoJywnMCYsJzQmMCYsJzAnNCYwJzgmNCYwJzQnOCY0JzwmOCY0JzgnPCY4J0AmPCY4JzwnQCY8J0QmQCY8J0AnRCZAJ0gmRCZAJ0QnSCZEJ0wmSCZEJ0gnTCZIJ1AmTCZIJ0wnUCZMJ1QmUCZMJ1AnVCZQJ1gmVCZQJ1QnWCZUJ1wmWCZUJ1gnXCZYJ2AmXCZYJ1wnYCZcJ2QmYCZcJ2AnZCZgJ2gmZCZgJ2QnaCZkJ2wmaCZkJ2gnbCZoJ3AmbCZoJ2wncCZsJ3QmcCZsJ3AndCZwJ3gmdCZwJ3QneCZ0J3wmeCZ0J3gnfCZ4J4AmfCZ4J3wngCZ8J4QmgCZ8J4AnhCaAJ4gmhCaAJ4QniCaEJ4wmiCaEJ4gnjCaIJ5AmjCaIJ4wnkCaMJ5QmkCaMJ5AnlCaQJ5gmlCaQJ5QnmCaYJ6AmnCaYJ5wnoCacJ6QmoCacJ6AnpCagJ6gmpCagJ6QnqCakJ6wmqCakJ6gnrCaoJ7AmrCaoJ6wnsCasJ7QmsCasJ7AntCawJ7gmtCawJ7QnuCa0J7wmuCa0J7gnvCa4J8AmvCa4J7wnwCa8J8QmwCa8J8AnxCbAJ8gmxCbAJ8QnyCbEJ8wmyCbEJ8gnzCbIJ9AmzCbIJ8wn0CbMJ9Qm0CbMJ9An1CbQJ9gm1CbQJ9Qn2CbUJ9wm2CbUJ9gn3CbYJ+Am3CbYJ9wn4CbcJ+Qm4CbcJ+An5CbgJ+gm5CbgJ+Qn6CbkJ+wm6CbkJ+gn7CboJ/Am7CboJ+wn8CbsJ/Qm8CbsJ/An9CbwJ/gm9CbwJ/Qn+Cb0J/wm+Cb0J/gn/Cb4JAAq/Cb4J/wkACr8JAQrACb8JAAoBCsAJAgrBCcAJAQoCCsEJAwrCCcEJAgoDCsIJBArDCcIJAwoECsMJBQrECcMJBAoFCsQJBgrFCcQJBQoGCsUJBwrGCcUJBgoHCsYJCArHCcYJBwoICscJCQrICccJCAoJCsgJCgrJCcgJCQoKCskJCwrKCckJCgoLCsoJDArLCcoJCwoMCssJDQrMCcsJDAoNCswJDgrNCcwJDQoOCs0JDwrOCc0JDgoPCs4JEArPCc4JDwoQCs8JEQrQCc8JEAoRCtAJEgrRCdAJEQoSCtEJEwrSCdEJEgoTCtIJFArTCdIJEwoUCtMJFQrUCdMJFAoVCtQJFgrVCdQJFQoWCtUJFwrWCdUJFgoXCtYJGArXCdYJFwoYCtcJGQrYCdcJGAoZCtgJGgrZCdgJGQoaCtkJGwraCdkJGgobCtoJHArbCdoJGwocCtsJHQrcCdsJHAodCtwJHgrdCdwJHQoeCt0JHwreCd0JHgofCt4JIArfCd4JHwogCt8JIQrgCd8JIAohCuAJIgrhCeAJIQoiCuEJIwriCeEJIgojCuIJJArjCeIJIwokCuMJJQrkCeMJJAolCuQJJgrlCeQJJQomCuUJJwrmCeUJJgonCucJKQroCecJKAopCugJKgrpCegJKQoqCukJKwrqCekJKgorCuoJLArrCeoJKwosCusJLQrsCesJLAotCuwJLgrtCewJLQouCu0JLwruCe0JLgovCu4JMArvCe4JLwowCu8JMQrwCe8JMAoxCvAJMgrxCfAJMQoyCvEJMwryCfEJMgozCvIJNArzCfIJMwo0CvMJNQr0CfMJNAo1CvQJNgr1CfQJNQo2CvUJNwr2CfUJNgo3CvYJOAr3CfYJNwo4CvcJOQr4CfcJOAo5CvgJOgr5CfgJOQo6CvkJOwr6CfkJOgo7CvoJPAr7CfoJOwo8CvsJPQr8CfsJPAo9CvwJPgr9CfwJPQo+Cv0JPwr+Cf0JPgo/Cv4JQAr/Cf4JPwpACv8JQQoACv8JQApBCgAKQgoBCgAKQQpCCgEKQwoCCgEKQgpDCgIKRAoDCgIKQwpECgMKRQoECgMKRApFCgQKRgoFCgQKRQpGCgUKRwoGCgUKRgpHCgYKSAoHCgYKRwpICgcKSQoICgcKSApJCggKSgoJCggKSQpKCgkKSwoKCgkKSgpLCgoKTAoLCgoKSwpMCgsKTQoMCgsKTApNCgwKTgoNCgwKTQpOCg0KTwoOCg0KTgpPCg4KUAoPCg4KTwpQCg8KUQoQCg8KUApRChAKUgoRChAKUQpSChEKUwoSChEKUgpTChIKVAoTChIKUwpUChMKVQoUChMKVApVChQKVgoVChQKVQpWChUKVwoWChUKVgpXChYKWAoXChYKVwpYChcKWQoYChcKWApZChgKWgoZChgKWQpaChkKWwoaChkKWgpbChoKXAobChoKWwpcChsKXQocChsKXApdChwKXgodChwKXQpeCh0KXwoeCh0KXgpfCh4KYAofCh4KXwpgCh8KYQogCh8KYAphCiAKYgohCiAKYQpiCiEKYwoiCiEKYgpjCiIKZAojCiIKYwpkCiMKZQokCiMKZAplCiQKZgolCiQKZQpmCiUKZwomCiUKZgpnCiYKaAonCiYKZwpoCigKagopCigKaQpqCikKawoqCikKagprCioKbAorCioKawpsCisKbQosCisKbAptCiwKbgotCiwKbQpuCi0KbwouCi0KbgpvCi4KcAovCi4KbwpwCi8KcQowCi8KcApxCjAKcgoxCjAKcQpyCjEKcwoyCjEKcgpzCjIKdAozCjIKcwp0CjMKdQo0CjMKdAp1CjQKdgo1CjQKdQp2CjUKdwo2CjUKdgp3CjYKeAo3CjYKdwp4CjcKeQo4CjcKeAp5CjgKego5CjgKeQp6CjkKewo6CjkKegp7CjoKfAo7CjoKewp8CjsKfQo8CjsKfAp9CjwKfgo9CjwKfQp+Cj0Kfwo+Cj0Kfgp/Cj4KgAo/Cj4KfwqACj8KgQpACj8KgAqBCkAKggpBCkAKgQqCCkEKgwpCCkEKggqDCkIKhApDCkIKgwqECkMKhQpECkMKhAqFCkQKhgpFCkQKhQqGCkUKhwpGCkUKhgqHCkYKiApHCkYKhwqICkcKiQpICkcKiAqJCkgKigpJCkgKiQqKCkkKiwpKCkkKigqLCkoKjApLCkoKiwqMCksKjQpMCksKjAqNCkwKjgpNCkwKjQqOCk0KjwpOCk0KjgqPCk4KkApPCk4KjwqQCk8KkQpQCk8KkAqRClAKkgpRClAKkQqSClEKkwpSClEKkgqTClIKlApTClIKkwqUClMKlQpUClMKlAqVClQKlgpVClQKlQqWClUKlwpWClUKlgqXClYKmApXClYKlwqYClcKmQpYClcKmAqZClgKmgpZClgKmQqaClkKmwpaClkKmgqbCloKnApbCloKmwqcClsKnQpcClsKnAqdClwKngpdClwKnQqeCl0KnwpeCl0KngqfCl4KoApfCl4KnwqgCl8KoQpgCl8KoAqhCmAKogphCmAKoQqiCmEKowpiCmEKogqjCmIKpApjCmIKowqkCmMKpQpkCmMKpAqlCmQKpgplCmQKpQqmCmUKpwpmCmUKpgqnCmYKqApnCmYKpwqoCmcKqQpoCmcKqAqpCmkKqwpqCmkKqgqrCmoKrAprCmoKqwqsCmsKrQpsCmsKrAqtCmwKrgptCmwKrQquCm0KrwpuCm0KrgqvCm4KsApvCm4KrwqwCm8KsQpwCm8KsAqxCnAKsgpxCnAKsQqyCnEKswpyCnEKsgqzCnIKtApzCnIKswq0CnMKtQp0CnMKtAq1CnQKtgp1CnQKtQq2CnUKtwp2CnUKtgq3CnYKuAp3CnYKtwq4CncKuQp4CncKuAq5CngKugp5CngKuQq6CnkKuwp6CnkKugq7CnoKvAp7CnoKuwq8CnsKvQp8CnsKvAq9CnwKvgp9CnwKvQq+Cn0Kvwp+Cn0Kvgq/Cn4KwAp/Cn4KvwrACn8KwQqACn8KwArBCoAKwgqBCoAKwQrCCoEKwwqCCoEKwgrDCoIKxAqDCoIKwwrECoMKxQqECoMKxArFCoQKxgqFCoQKxQrGCoUKxwqGCoUKxgrHCoYKyAqHCoYKxwrICocKyQqICocKyArJCogKygqJCogKyQrKCokKywqKCokKygrLCooKzAqLCooKywrMCosKzQqMCosKzArNCowKzgqNCowKzQrOCo0KzwqOCo0KzgrPCo4K0AqPCo4KzwrQCo8K0QqQCo8K0ArRCpAK0gqRCpAK0QrSCpEK0wqSCpEK0grTCpIK1AqTCpIK0wrUCpMK1QqUCpMK1ArVCpQK1gqVCpQK1QrWCpUK1wqWCpUK1grXCpYK2AqXCpYK1wrYCpcK2QqYCpcK2ArZCpgK2gqZCpgK2QraCpkK2wqaCpkK2grbCpoK3AqbCpoK2wrcCpsK3QqcCpsK3ArdCpwK3gqdCpwK3QreCp0K3wqeCp0K3grfCp4K4AqfCp4K3wrgCp8K4QqgCp8K4ArhCqAK4gqhCqAK4QriCqEK4wqiCqEK4grjCqIK5AqjCqIK4wrkCqMK5QqkCqMK5ArlCqQK5gqlCqQK5QrmCqUK5wqmCqUK5grnCqYK6AqnCqYK5wroCqcK6QqoCqcK6ArpCqgK6gqpCqgK6QrqCqoK7AqrCqoK6wrsCqsK7QqsCqsK7ArtCqwK7gqtCqwK7QruCq0K7wquCq0K7grvCq4K8AqvCq4K7wrwCq8K8QqwCq8K8ArxCrAK8gqxCrAK8QryCrEK8wqyCrEK8grzCrIK9AqzCrIK8wr0CrMK9Qq0CrMK9Ar1CrQK9gq1CrQK9Qr2CrUK9wq2CrUK9gr3CrYK+Aq3CrYK9wr4CrcK+Qq4CrcK+Ar5CrgK+gq5CrgK+Qr6CrkK+wq6CrkK+gr7CroK/Aq7CroK+wr8CrsK/Qq8CrsK/Ar9CrwK/gq9CrwK/Qr+Cr0K/wq+Cr0K/gr/Cr4KAAu/Cr4K/woAC78KAQvACr8KAAsBC8AKAgvBCsAKAQsCC8EKAwvCCsEKAgsDC8IKBAvDCsIKAwsEC8MKBQvECsMKBAsFC8QKBgvFCsQKBQsGC8UKBwvGCsUKBgsHC8YKCAvHCsYKBwsIC8cKCQvICscKCAsJC8gKCgvJCsgKCQsKC8kKCwvKCskKCgsLC8oKDAvLCsoKCwsMC8sKDQvMCssKDAsNC8wKDgvNCswKDQsOC80KDwvOCs0KDgsPC84KEAvPCs4KDwsQC88KEQvQCs8KEAsRC9AKEgvRCtAKEQsSC9EKEwvSCtEKEgsTC9IKFAvTCtIKEwsUC9MKFQvUCtMKFAsVC9QKFgvVCtQKFQsWC9UKFwvWCtUKFgsXC9YKGAvXCtYKFwsYC9cKGQvYCtcKGAsZC9gKGgvZCtgKGQsaC9kKGwvaCtkKGgsbC9oKHAvbCtoKGwscC9sKHQvcCtsKHAsdC9wKHgvdCtwKHQseC90KHwveCt0KHgsfC94KIAvfCt4KHwsgC98KIQvgCt8KIAshC+AKIgvhCuAKIQsiC+EKIwviCuEKIgsjC+IKJAvjCuIKIwskC+MKJQvkCuMKJAslC+QKJgvlCuQKJQsmC+UKJwvmCuUKJgsnC+YKKAvnCuYKJwsoC+cKKQvoCucKKAspC+gKKgvpCugKKQsqC+kKKwvqCukKKgsrC+sKLQvsCusKLAstC+wKLgvtCuwKLQsuC+0KLwvuCu0KLgsvC+4KMAvvCu4KLwswC+8KMQvwCu8KMAsxC/AKMgvxCvAKMQsyC/EKMwvyCvEKMgszC/IKNAvzCvIKMws0C/MKNQv0CvMKNAs1C/QKNgv1CvQKNQs2C/UKNwv2CvUKNgs3C/YKOAv3CvYKNws4C/cKOQv4CvcKOAs5C/gKOgv5CvgKOQs6C/kKOwv6CvkKOgs7C/oKPAv7CvoKOws8C/sKPQv8CvsKPAs9C/wKPgv9CvwKPQs+C/0KPwv+Cv0KPgs/C/4KQAv/Cv4KPwtAC/8KQQsAC/8KQAtBCwALQgsBCwALQQtCCwELQwsCCwELQgtDCwILRAsDCwILQwtECwMLRQsECwMLRAtFCwQLRgsFCwQLRQtGCwULRwsGCwULRgtHCwYLSAsHCwYLRwtICwcLSQsICwcLSAtJCwgLSgsJCwgLSQtKCwkLSwsKCwkLSgtLCwoLTAsLCwoLSwtMCwsLTQsMCwsLTAtNCwwLTgsNCwwLTQtOCw0LTwsOCw0LTgtPCw4LUAsPCw4LTwtQCw8LUQsQCw8LUAtRCxALUgsRCxALUQtSCxELUwsSCxELUgtTCxILVAsTCxILUwtUCxMLVQsUCxMLVAtVCxQLVgsVCxQLVQtWCxULVwsWCxULVgtXCxYLWAsXCxYLVwtYCxcLWQsYCxcLWAtZCxgLWgsZCxgLWQtaCxkLWwsaCxkLWgtbCxoLXAsbCxoLWwtcCxsLXQscCxsLXAtdCxwLXgsdCxwLXQteCx0LXwseCx0LXgtfCx4LYAsfCx4LXwtgCx8LYQsgCx8LYAthCyALYgshCyALYQtiCyELYwsiCyELYgtjCyILZAsjCyILYwtkCyMLZQskCyMLZAtlCyQLZgslCyQLZQtmCyULZwsmCyULZgtnCyYLaAsnCyYLZwtoCycLaQsoCycLaAtpCygLagspCygLaQtqCykLawsqCykLagtrCyoLbAsrCyoLawtsCywLbgstCywLbQtuCy0LbwsuCy0LbgtvCy4LcAsvCy4LbwtwCy8LcQswCy8LcAtxCzALcgsxCzALcQtyCzELcwsyCzELcgtzCzILdAszCzILcwt0CzMLdQs0CzMLdAt1CzQLdgs1CzQLdQt2CzULdws2CzULdgt3CzYLeAs3CzYLdwt4CzcLeQs4CzcLeAt5CzgLegs5CzgLeQt6CzkLews6CzkLegt7CzoLfAs7CzoLewt8CzsLfQs8CzsLfAt9CzwLfgs9CzwLfQt+Cz0Lfws+Cz0Lfgt/Cz4LgAs/Cz4LfwuACz8LgQtACz8LgAuBC0ALggtBC0ALgQuCC0ELgwtCC0ELgguDC0ILhAtDC0ILgwuEC0MLhQtEC0MLhAuFC0QLhgtFC0QLhQuGC0ULhwtGC0ULhguHC0YLiAtHC0YLhwuIC0cLiQtIC0cLiAuJC0gLigtJC0gLiQuKC0kLiwtKC0kLiguLC0oLjAtLC0oLiwuMC0sLjQtMC0sLjAuNC0wLjgtNC0wLjQuOC00LjwtOC00LjguPC04LkAtPC04LjwuQC08LkQtQC08LkAuRC1ALkgtRC1ALkQuSC1ELkwtSC1ELkguTC1ILlAtTC1ILkwuUC1MLlQtUC1MLlAuVC1QLlgtVC1QLlQuWC1ULlwtWC1ULlguXC1YLmAtXC1YLlwuYC1cLmQtYC1cLmAuZC1gLmgtZC1gLmQuaC1kLmwtaC1kLmgubC1oLnAtbC1oLmwucC1sLnQtcC1sLnAudC1wLngtdC1wLnQueC10LnwteC10LngufC14LoAtfC14LnwugC18LoQtgC18LoAuhC2ALogthC2ALoQuiC2ELowtiC2ELogujC2ILpAtjC2ILowukC2MLpQtkC2MLpAulC2QLpgtlC2QLpQumC2ULpwtmC2ULpgunC2YLqAtnC2YLpwuoC2cLqQtoC2cLqAupC2gLqgtpC2gLqQuqC2kLqwtqC2kLqgurC2oLrAtrC2oLqwusC2sLrQtsC2sLrAutC20LrwtuC20LrguvC24LsAtvC24LrwuwC28LsQtwC28LsAuxC3ALsgtxC3ALsQuyC3ELswtyC3ELsguzC3ILtAtzC3ILswu0C3MLtQt0C3MLtAu1C3QLtgt1C3QLtQu2C3ULtwt2C3ULtgu3C3YLuAt3C3YLtwu4C3cLuQt4C3cLuAu5C3gLugt5C3gLuQu6C3kLuwt6C3kLugu7C3oLvAt7C3oLuwu8C3sLvQt8C3sLvAu9C3wLvgt9C3wLvQu+C30Lvwt+C30Lvgu/C34LwAt/C34LvwvAC38LwQuAC38LwAvBC4ALwguBC4ALwQvCC4ELwwuCC4ELwgvDC4ILxAuDC4ILwwvEC4MLxQuEC4MLxAvFC4QLxguFC4QLxQvGC4ULxwuGC4ULxgvHC4YLyAuHC4YLxwvIC4cLyQuIC4cLyAvJC4gLyguJC4gLyQvKC4kLywuKC4kLygvLC4oLzAuLC4oLywvMC4sLzQuMC4sLzAvNC4wLzguNC4wLzQvOC40LzwuOC40LzgvPC44L0AuPC44LzwvQC48L0QuQC48L0AvRC5AL0guRC5AL0QvSC5EL0wuSC5EL0gvTC5IL1AuTC5IL0wvUC5ML1QuUC5ML1AvVC5QL1guVC5QL1QvWC5UL1wuWC5UL1gvXC5YL2AuXC5YL1wvYC5cL2QuYC5cL2AvZC5gL2guZC5gL2QvaC5kL2wuaC5kL2gvbC5oL3AubC5oL2wvcC5sL3QucC5sL3AvdC5wL3gudC5wL3QveC50L3wueC50L3gvfC54L4AufC54L3wvgC58L4QugC58L4AvhC6AL4guhC6AL4QviC6EL4wuiC6EL4gvjC6IL5AujC6IL4wvkC6ML5QukC6ML5AvlC6QL5gulC6QL5QvmC6UL5wumC6UL5gvnC6YL6AunC6YL5wvoC6cL6QuoC6cL6AvpC6gL6gupC6gL6QvqC6kL6wuqC6kL6gvrC6oL7AurC6oL6wvsC6sL7QusC6sL7AvtC6wL7gutC6wL7QvuC64L8AuvC64L7wvwC68L8QuwC68L8AvxC7AL8guxC7AL8QvyC7EL8wuyC7EL8gvzC7IL9AuzC7IL8wv0C7ML9Qu0C7ML9Av1C7QL9gu1C7QL9Qv2C7UL9wu2C7UL9gv3C7YL+Au3C7YL9wv4C7cL+Qu4C7cL+Av5C7gL+gu5C7gL+Qv6C7kL+wu6C7kL+gv7C7oL/Au7C7oL+wv8C7sL/Qu8C7sL/Av9C7wL/gu9C7wL/Qv+C70L/wu+C70L/gv/C74LAAy/C74L/wsADL8LAQzAC78LAAwBDMALAgzBC8ALAQwCDMELAwzCC8ELAgwDDMILBAzDC8ILAwwEDMMLBQzEC8MLBAwFDMQLBgzFC8QLBQwGDMULBwzGC8ULBgwHDMYLCAzHC8YLBwwIDMcLCQzIC8cLCAwJDMgLCgzJC8gLCQwKDMkLCwzKC8kLCgwLDMoLDAzLC8oLCwwMDMsLDQzMC8sLDAwNDMwLDgzNC8wLDQwODM0LDwzOC80LDgwPDM4LEAzPC84LDwwQDM8LEQzQC88LEAwRDNALEgzRC9ALEQwSDNELEwzSC9ELEgwTDNILFAzTC9ILEwwUDNMLFQzUC9MLFAwVDNQLFgzVC9QLFQwWDNULFwzWC9ULFgwXDNYLGAzXC9YLFwwYDNcLGQzYC9cLGAwZDNgLGgzZC9gLGQwaDNkLGwzaC9kLGgwbDNoLHAzbC9oLGwwcDNsLHQzcC9sLHAwdDNwLHgzdC9wLHQweDN0LHwzeC90LHgwfDN4LIAzfC94LHwwgDN8LIQzgC98LIAwhDOALIgzhC+ALIQwiDOELIwziC+ELIgwjDOILJAzjC+ILIwwkDOMLJQzkC+MLJAwlDOQLJgzlC+QLJQwmDOULJwzmC+ULJgwnDOYLKAznC+YLJwwoDOcLKQzoC+cLKAwpDOgLKgzpC+gLKQwqDOkLKwzqC+kLKgwrDOoLLAzrC+oLKwwsDOsLLQzsC+sLLAwtDOwLLgztC+wLLQwuDO0LLwzuC+0LLgwvDO8LMQzwC+8LMAwxDPALMgzxC/ALMQwyDPELMwzyC/ELMgwzDPILNAzzC/ILMww0DPMLNQz0C/MLNAw1DPQLNgz1C/QLNQw2DPULNwz2C/ULNgw3DPYLOAz3C/YLNww4DPcLOQz4C/cLOAw5DPgLOgz5C/gLOQw6DPkLOwz6C/kLOgw7DPoLPAz7C/oLOww8DPsLPQz8C/sLPAw9DPwLPgz9C/wLPQw+DP0LPwz+C/0LPgw/DP4LQAz/C/4LPwxADP8LQQwADP8LQAxBDAAMQgwBDAAMQQxCDAEMQwwCDAEMQgxDDAIMRAwDDAIMQwxEDAMMRQwEDAMMRAxFDAQMRgwFDAQMRQxGDAUMRwwGDAUMRgxHDAYMSAwHDAYMRwxIDAcMSQwIDAcMSAxJDAgMSgwJDAgMSQxKDAkMSwwKDAkMSgxLDAoMTAwLDAoMSwxMDAsMTQwMDAsMTAxNDAwMTgwNDAwMTQxODA0MTwwODA0MTgxPDA4MUAwPDA4MTwxQDA8MUQwQDA8MUAxRDBAMUgwRDBAMUQxSDBEMUwwSDBEMUgxTDBIMVAwTDBIMUwxUDBMMVQwUDBMMVAxVDBQMVgwVDBQMVQxWDBUMVwwWDBUMVgxXDBYMWAwXDBYMVwxYDBcMWQwYDBcMWAxZDBgMWgwZDBgMWQxaDBkMWwwaDBkMWgxbDBoMXAwbDBoMWwxcDBsMXQwcDBsMXAxdDBwMXgwdDBwMXQxeDB0MXwweDB0MXgxfDB4MYAwfDB4MXwxgDB8MYQwgDB8MYAxhDCAMYgwhDCAMYQxiDCEMYwwiDCEMYgxjDCIMZAwjDCIMYwxkDCMMZQwkDCMMZAxlDCQMZgwlDCQMZQxmDCUMZwwmDCUMZgxnDCYMaAwnDCYMZwxoDCcMaQwoDCcMaAxpDCgMagwpDCgMaQxqDCkMawwqDCkMagxrDCoMbAwrDCoMawxsDCsMbQwsDCsMbAxtDCwMbgwtDCwMbQxuDC0MbwwuDC0MbgxvDC4McAwvDC4MbwxwDDAMcgwxDDAMcQxyDDEMcwwyDDEMcgxzDDIMdAwzDDIMcwx0DDMMdQw0DDMMdAx1DDQMdgw1DDQMdQx2DDUMdww2DDUMdgx3DDYMeAw3DDYMdwx4DDcMeQw4DDcMeAx5DDgMegw5DDgMeQx6DDkMeww6DDkMegx7DDoMfAw7DDoMewx8DDsMfQw8DDsMfAx9DDwMfgw9DDwMfQx+DD0Mfww+DD0Mfgx/DD4MgAw/DD4MfwyADD8MgQxADD8MgAyBDEAMggxBDEAMgQyCDEEMgwxCDEEMggyDDEIMhAxDDEIMgwyEDEMMhQxEDEMMhAyFDEQMhgxFDEQMhQyGDEUMhwxGDEUMhgyHDEYMiAxHDEYMhwyIDEcMiQxIDEcMiAyJDEgMigxJDEgMiQyKDEkMiwxKDEkMigyLDEoMjAxLDEoMiwyMDEsMjQxMDEsMjAyNDEwMjgxNDEwMjQyODE0MjwxODE0MjgyPDE4MkAxPDE4MjwyQDE8MkQxQDE8MkAyRDFAMkgxRDFAMkQySDFEMkwxSDFEMkgyTDFIMlAxTDFIMkwyUDFMMlQxUDFMMlAyVDFQMlgxVDFQMlQyWDFUMlwxWDFUMlgyXDFYMmAxXDFYMlwyYDFcMmQxYDFcMmAyZDFgMmgxZDFgMmQyaDFkMmwxaDFkMmgybDFoMnAxbDFoMmwycDFsMnQxcDFsMnAydDFwMngxdDFwMnQyeDF0MnwxeDF0MngyfDF4MoAxfDF4MnwygDF8MoQxgDF8MoAyhDGAMogxhDGAMoQyiDGEMowxiDGEMogyjDGIMpAxjDGIMowykDGMMpQxkDGMMpAylDGQMpgxlDGQMpQymDGUMpwxmDGUMpgynDGYMqAxnDGYMpwyoDGcMqQxoDGcMqAypDGgMqgxpDGgMqQyqDGkMqwxqDGkMqgyrDGoMrAxrDGoMqwysDGsMrQxsDGsMrAytDGwMrgxtDGwMrQyuDG0MrwxuDG0MrgyvDG4MsAxvDG4MrwywDG8MsQxwDG8MsAyxDHEMswxyDHEMsgyzDHIMtAxzDHIMswy0DHMMtQx0DHMMtAy1DHQMtgx1DHQMtQy2DHUMtwx2DHUMtgy3DHYMuAx3DHYMtwy4DHcMuQx4DHcMuAy5DHgMugx5DHgMuQy6DHkMuwx6DHkMugy7DHoMvAx7DHoMuwy8DHsMvQx8DHsMvAy9DHwMvgx9DHwMvQy+DH0Mvwx+DH0Mvgy/DH4MwAx/DH4MvwzADH8MwQyADH8MwAzBDIAMwgyBDIAMwQzCDIEMwwyCDIEMwgzDDIIMxAyDDIIMwwzEDIMMxQyEDIMMxAzFDIQMxgyFDIQMxQzGDIUMxwyGDIUMxgzHDIYMyAyHDIYMxwzIDIcMyQyIDIcMyAzJDIgMygyJDIgMyQzKDIkMywyKDIkMygzLDIoMzAyLDIoMywzMDIsMzQyMDIsMzAzNDIwMzgyNDIwMzQzODI0MzwyODI0MzgzPDI4M0AyPDI4MzwzQDI8M0QyQDI8M0AzRDJAM0gyRDJAM0QzSDJEM0wySDJEM0gzTDJIM1AyTDJIM0wzUDJMM1QyUDJMM1AzVDJQM1gyVDJQM1QzWDJUM1wyWDJUM1gzXDJYM2AyXDJYM1wzYDJcM2QyYDJcM2AzZDJgM2gyZDJgM2QzaDJkM2wyaDJkM2gzbDJoM3AybDJoM2wzcDJsM3QycDJsM3AzdDJwM3gydDJwM3QzeDJ0M3wyeDJ0M3gzfDJ4M4AyfDJ4M3wzgDJ8M4QygDJ8M4AzhDKAM4gyhDKAM4QziDKEM4wyiDKEM4gzjDKIM5AyjDKIM4wzkDKMM5QykDKMM5AzlDKQM5gylDKQM5QzmDKUM5wymDKUM5gznDKYM6AynDKYM5wzoDKcM6QyoDKcM6AzpDKgM6gypDKgM6QzqDKkM6wyqDKkM6gzrDKoM7AyrDKoM6wzsDKsM7QysDKsM7AztDKwM7gytDKwM7QzuDK0M7wyuDK0M7gzvDK4M8AyvDK4M7wzwDK8M8QywDK8M8AzxDLAM8gyxDLAM8QzyDLIM9AyzDLIM8wz0DLMM9Qy0DLMM9Az1DLQM9gy1DLQM9Qz2DLUM9wy2DLUM9gz3DLYM+Ay3DLYM9wz4DLcM+Qy4DLcM+Az5DLgM+gy5DLgM+Qz6DLkM+wy6DLkM+gz7DLoM/Ay7DLoM+wz8DLsM/Qy8DLsM/Az9DLwM/gy9DLwM/Qz+DL0M/wy+DL0M/gz/DL4MAA2/DL4M/wwADb8MAQ3ADL8MAA0BDcAMAg3BDMAMAQ0CDcEMAw3CDMEMAg0DDcIMBA3DDMIMAw0EDcMMBQ3EDMMMBA0FDcQMBg3FDMQMBQ0GDcUMBw3GDMUMBg0HDcYMCA3HDMYMBw0IDccMCQ3IDMcMCA0JDcgMCg3JDMgMCQ0KDckMCw3KDMkMCg0LDcoMDA3LDMoMCw0MDcsMDQ3MDMsMDA0NDcwMDg3NDMwMDQ0ODc0MDw3ODM0MDg0PDc4MEA3PDM4MDw0QDc8MEQ3QDM8MEA0RDdAMEg3RDNAMEQ0SDdEMEw3SDNEMEg0TDdIMFA3TDNIMEw0UDdMMFQ3UDNMMFA0VDdQMFg3VDNQMFQ0WDdUMFw3WDNUMFg0XDdYMGA3XDNYMFw0YDdcMGQ3YDNcMGA0ZDdgMGg3ZDNgMGQ0aDdkMGw3aDNkMGg0bDdoMHA3bDNoMGw0cDdsMHQ3cDNsMHA0dDdwMHg3dDNwMHQ0eDd0MHw3eDN0MHg0fDd4MIA3fDN4MHw0gDd8MIQ3gDN8MIA0hDeAMIg3hDOAMIQ0iDeEMIw3iDOEMIg0jDeIMJA3jDOIMIw0kDeMMJQ3kDOMMJA0lDeQMJg3lDOQMJQ0mDeUMJw3mDOUMJg0nDeYMKA3nDOYMJw0oDecMKQ3oDOcMKA0pDegMKg3pDOgMKQ0qDekMKw3qDOkMKg0rDeoMLA3rDOoMKw0sDesMLQ3sDOsMLA0tDewMLg3tDOwMLQ0uDe0MLw3uDO0MLg0vDe4MMA3vDO4MLw0wDe8MMQ3wDO8MMA0xDfAMMg3xDPAMMQ0yDfEMMw3yDPEMMg0zDfMMNQ30DPMMNA01DfQMNg31DPQMNQ02DfUMNw32DPUMNg03DfYMOA33DPYMNw04DfcMOQ34DPcMOA05DfgMOg35DPgMOQ06DfkMOw36DPkMOg07DfoMPA37DPoMOw08DfsMPQ38DPsMPA09DfwMPg39DPwMPQ0+Df0MPw3+DP0MPg0/Df4MQA3/DP4MPw1ADf8MQQ0ADf8MQA1BDQANQg0BDQANQQ1CDQENQw0CDQENQg1DDQINRA0DDQINQw1EDQMNRQ0EDQMNRA1FDQQNRg0FDQQNRQ1GDQUNRw0GDQUNRg1HDQYNSA0HDQYNRw1IDQcNSQ0IDQcNSA1JDQgNSg0JDQgNSQ1KDQkNSw0KDQkNSg1LDQoNTA0LDQoNSw1MDQsNTQ0MDQsNTA1NDQwNTg0NDQwNTQ1ODQ0NTw0ODQ0NTg1PDQ4NUA0PDQ4NTw1QDQ8NUQ0QDQ8NUA1RDRANUg0RDRANUQ1SDRENUw0SDRENUg1TDRINVA0TDRINUw1UDRMNVQ0UDRMNVA1VDRQNVg0VDRQNVQ1WDRUNVw0WDRUNVg1XDRYNWA0XDRYNVw1YDRcNWQ0YDRcNWA1ZDRgNWg0ZDRgNWQ1aDRkNWw0aDRkNWg1bDRoNXA0bDRoNWw1cDRsNXQ0cDRsNXA1dDRwNXg0dDRwNXQ1eDR0NXw0eDR0NXg1fDR4NYA0fDR4NXw1gDR8NYQ0gDR8NYA1hDSANYg0hDSANYQ1iDSENYw0iDSENYg1jDSINZA0jDSINYw1kDSMNZQ0kDSMNZA1lDSQNZg0lDSQNZQ1mDSUNZw0mDSUNZg1nDSYNaA0nDSYNZw1oDScNaQ0oDScNaA1pDSgNag0pDSgNaQ1qDSkNaw0qDSkNag1rDSoNbA0rDSoNaw1sDSsNbQ0sDSsNbA1tDSwNbg0tDSwNbQ1uDS0Nbw0uDS0Nbg1vDS4NcA0vDS4Nbw1wDS8NcQ0wDS8NcA1xDTANcg0xDTANcQ1yDTENcw0yDTENcg1zDTINdA0zDTINcw10DTQNdg01DTQNdQ12DTUNdw02DTUNdg13DTYNeA03DTYNdw14DTcNeQ04DTcNeA15DTgNeg05DTgNeQ16DTkNew06DTkNeg17DToNfA07DToNew18DTsNfQ08DTsNfA19DTwNfg09DTwNfQ1+DT0Nfw0+DT0Nfg1/DT4NgA0/DT4Nfw2ADT8NgQ1ADT8NgA2BDUANgg1BDUANgQ2CDUENgw1CDUENgg2DDUINhA1DDUINgw2EDUMNhQ1EDUMNhA2FDUQNhg1FDUQNhQ2GDUUNhw1GDUUNhg2HDUYNiA1HDUYNhw2IDUcNiQ1IDUcNiA2JDUgNig1JDUgNiQ2KDUkNiw1KDUkNig2LDUoNjA1LDUoNiw2MDUsNjQ1MDUsNjA2NDUwNjg1NDUwNjQ2ODU0Njw1ODU0Njg2PDU4NkA1PDU4Njw2QDU8NkQ1QDU8NkA2RDVANkg1RDVANkQ2SDVENkw1SDVENkg2TDVINlA1TDVINkw2UDVMNlQ1UDVMNlA2VDVQNlg1VDVQNlQ2WDVUNlw1WDVUNlg2XDVYNmA1XDVYNlw2YDVcNmQ1YDVcNmA2ZDVgNmg1ZDVgNmQ2aDVkNmw1aDVkNmg2bDVoNnA1bDVoNmw2cDVsNnQ1cDVsNnA2dDVwNng1dDVwNnQ2eDV0Nnw1eDV0Nng2fDV4NoA1fDV4Nnw2gDV8NoQ1gDV8NoA2hDWANog1hDWANoQ2iDWENow1iDWENog2jDWINpA1jDWINow2kDWMNpQ1kDWMNpA2lDWQNpg1lDWQNpQ2mDWUNpw1mDWUNpg2nDWYNqA1nDWYNpw2oDWcNqQ1oDWcNqA2pDWgNqg1pDWgNqQ2qDWkNqw1qDWkNqg2rDWoNrA1rDWoNqw2sDWsNrQ1sDWsNrA2tDWwNrg1tDWwNrQ2uDW0Nrw1uDW0Nrg2vDW4NsA1vDW4Nrw2wDW8NsQ1wDW8NsA2xDXANsg1xDXANsQ2yDXENsw1yDXENsg2zDXINtA1zDXINsw20DXMNtQ10DXMNtA21DXUNtw12DXUNtg23DXYNuA13DXYNtw24DXcNuQ14DXcNuA25DXgNug15DXgNuQ26DXkNuw16DXkNug27DXoNvA17DXoNuw28DXsNvQ18DXsNvA29DXwNvg19DXwNvQ2+DX0Nvw1+DX0Nvg2/DX4NwA1/DX4Nvw3ADX8NwQ2ADX8NwA3BDYANwg2BDYANwQ3CDYENww2CDYENwg3DDYINxA2DDYINww3EDYMNxQ2EDYMNxA3FDYQNxg2FDYQNxQ3GDYUNxw2GDYUNxg3HDYYNyA2HDYYNxw3IDYcNyQ2IDYcNyA3JDYgNyg2JDYgNyQ3KDYkNyw2KDYkNyg3LDYoNzA2LDYoNyw3MDYsNzQ2MDYsNzA3NDYwNzg2NDYwNzQ3ODY0Nzw2ODY0Nzg3PDY4N0A2PDY4Nzw3QDY8N0Q2QDY8N0A3RDZAN0g2RDZAN0Q3SDZEN0w2SDZEN0g3TDZIN1A2TDZIN0w3UDZMN1Q2UDZMN1A3VDZQN1g2VDZQN1Q3WDZUN1w2WDZUN1g3XDZYN2A2XDZYN1w3YDZcN2Q2YDZcN2A3ZDZgN2g2ZDZgN2Q3aDZkN2w2aDZkN2g3bDZoN3A2bDZoN2w3cDZsN3Q2cDZsN3A3dDZwN3g2dDZwN3Q3eDZ0N3w2eDZ0N3g3fDZ4N4A2fDZ4N3w3gDZ8N4Q2gDZ8N4A3hDaAN4g2hDaAN4Q3iDaEN4w2iDaEN4g3jDaIN5A2jDaIN4w3kDaMN5Q2kDaMN5A3lDaQN5g2lDaQN5Q3mDaUN5w2mDaUN5g3nDaYN6A2nDaYN5w3oDacN6Q2oDacN6A3pDagN6g2pDagN6Q3qDakN6w2qDakN6g3rDaoN7A2rDaoN6w3sDasN7Q2sDasN7A3tDawN7g2tDawN7Q3uDa0N7w2uDa0N7g3vDa4N8A2vDa4N7w3wDa8N8Q2wDa8N8A3xDbAN8g2xDbAN8Q3yDbEN8w2yDbEN8g3zDbIN9A2zDbIN8w30DbMN9Q20DbMN9A31DbQN9g21DbQN9Q32DbYN+A23DbYN9w34DbcN+Q24DbcN+A35DbgN+g25DbgN+Q36DbkN+w26DbkN+g37DboN/A27DboN+w38DbsN/Q28DbsN/A39DbwN/g29DbwN/Q3+Db0N/w2+Db0N/g3/Db4NAA6/Db4N/w0ADr8NAQ7ADb8NAA4BDsANAg7BDcANAQ4CDsENAw7CDcENAg4DDsINBA7DDcINAw4EDsMNBQ7EDcMNBA4FDsQNBg7FDcQNBQ4GDsUNBw7GDcUNBg4HDsYNCA7HDcYNBw4IDscNCQ7IDccNCA4JDsgNCg7JDcgNCQ4KDskNCw7KDckNCg4LDsoNDA7LDcoNCw4MDssNDQ7MDcsNDA4NDswNDg7NDcwNDQ4ODs0NDw7ODc0NDg4PDs4NEA7PDc4NDw4QDs8NEQ7QDc8NEA4RDtANEg7RDdANEQ4SDtENEw7SDdENEg4TDtINFA7TDdINEw4UDtMNFQ7UDdMNFA4VDtQNFg7VDdQNFQ4WDtUNFw7WDdUNFg4XDtYNGA7XDdYNFw4YDtcNGQ7YDdcNGA4ZDtgNGg7ZDdgNGQ4aDtkNGw7aDdkNGg4bDtoNHA7bDdoNGw4cDtsNHQ7cDdsNHA4dDtwNHg7dDdwNHQ4eDt0NHw7eDd0NHg4fDt4NIA7fDd4NHw4gDt8NIQ7gDd8NIA4hDuANIg7hDeANIQ4iDuENIw7iDeENIg4jDuINJA7jDeINIw4kDuMNJQ7kDeMNJA4lDuQNJg7lDeQNJQ4mDuUNJw7mDeUNJg4nDuYNKA7nDeYNJw4oDucNKQ7oDecNKA4pDugNKg7pDegNKQ4qDukNKw7qDekNKg4rDuoNLA7rDeoNKw4sDusNLQ7sDesNLA4tDuwNLg7tDewNLQ4uDu0NLw7uDe0NLg4vDu4NMA7vDe4NLw4wDu8NMQ7wDe8NMA4xDvANMg7xDfANMQ4yDvENMw7yDfENMg4zDvINNA7zDfINMw40DvMNNQ70DfMNNA41DvQNNg71DfQNNQ42DvUNNw72DfUNNg43DvcNOQ74DfcNOA45DvgNOg75DfgNOQ46DvkNOw76DfkNOg47DvoNPA77DfoNOw48DvsNPQ78DfsNPA49DvwNPg79DfwNPQ4+Dv0NPw7+Df0NPg4/Dv4NQA7/Df4NPw5ADv8NQQ4ADv8NQA5BDgAOQg4BDgAOQQ5CDgEOQw4CDgEOQg5DDgIORA4DDgIOQw5EDgMORQ4EDgMORA5FDgQORg4FDgQORQ5GDgUORw4GDgUORg5HDgYOSA4HDgYORw5IDgcOSQ4IDgcOSA5JDggOSg4JDggOSQ5KDgkOSw4KDgkOSg5LDgoOTA4LDgoOSw5MDgsOTQ4MDgsOTA5NDgwOTg4NDgwOTQ5ODg0OTw4ODg0OTg5PDg4OUA4PDg4OTw5QDg8OUQ4QDg8OUA5RDhAOUg4RDhAOUQ5SDhEOUw4SDhEOUg5TDhIOVA4TDhIOUw5UDhMOVQ4UDhMOVA5VDhQOVg4VDhQOVQ5WDhUOVw4WDhUOVg5XDhYOWA4XDhYOVw5YDhcOWQ4YDhcOWA5ZDhgOWg4ZDhgOWQ5aDhkOWw4aDhkOWg5bDhoOXA4bDhoOWw5cDhsOXQ4cDhsOXA5dDhwOXg4dDhwOXQ5eDh0OXw4eDh0OXg5fDh4OYA4fDh4OXw5gDh8OYQ4gDh8OYA5hDiAOYg4hDiAOYQ5iDiEOYw4iDiEOYg5jDiIOZA4jDiIOYw5kDiMOZQ4kDiMOZA5lDiQOZg4lDiQOZQ5mDiUOZw4mDiUOZg5nDiYOaA4nDiYOZw5oDicOaQ4oDicOaA5pDigOag4pDigOaQ5qDikOaw4qDikOag5rDioObA4rDioOaw5sDisObQ4sDisObA5tDiwObg4tDiwObQ5uDi0Obw4uDi0Obg5vDi4OcA4vDi4Obw5wDi8OcQ4wDi8OcA5xDjAOcg4xDjAOcQ5yDjEOcw4yDjEOcg5zDjIOdA4zDjIOcw50DjMOdQ40DjMOdA51DjQOdg41DjQOdQ52DjUOdw42DjUOdg53DjYOeA43DjYOdw54DjgOeg45DjgOeQ56DjkOew46DjkOeg57DjoOfA47DjoOew58DjsOfQ48DjsOfA59DjwOfg49DjwOfQ5+Dj0Ofw4+Dj0Ofg5/Dj4OgA4/Dj4Ofw6ADj8OgQ5ADj8OgA6BDkAOgg5BDkAOgQ6CDkEOgw5CDkEOgg6DDkIOhA5DDkIOgw6EDkMOhQ5EDkMOhA6FDkQOhg5FDkQOhQ6GDkUOhw5GDkUOhg6HDkYOiA5HDkYOhw6IDkcOiQ5IDkcOiA6JDkgOig5JDkgOiQ6KDkkOiw5KDkkOig6LDkoOjA5LDkoOiw6MDksOjQ5MDksOjA6NDkwOjg5NDkwOjQ6ODk0Ojw5ODk0Ojg6PDk4OkA5PDk4Ojw6QDk8OkQ5QDk8OkA6RDlAOkg5RDlAOkQ6SDlEOkw5SDlEOkg6TDlIOlA5TDlIOkw6UDlMOlQ5UDlMOlA6VDlQOlg5VDlQOlQ6WDlUOlw5WDlUOlg6XDlYOmA5XDlYOlw6YDlcOmQ5YDlcOmA6ZDlgOmg5ZDlgOmQ6aDlkOmw5aDlkOmg6bDloOnA5bDloOmw6cDlsOnQ5cDlsOnA6dDlwOng5dDlwOnQ6eDl0Onw5eDl0Ong6fDl4OoA5fDl4Onw6gDl8OoQ5gDl8OoA6hDmAOog5hDmAOoQ6iDmEOow5iDmEOog6jDmIOpA5jDmIOow6kDmMOpQ5kDmMOpA6lDmQOpg5lDmQOpQ6mDmUOpw5mDmUOpg6nDmYOqA5nDmYOpw6oDmcOqQ5oDmcOqA6pDmgOqg5pDmgOqQ6qDmkOqw5qDmkOqg6rDmoOrA5rDmoOqw6sDmsOrQ5sDmsOrA6tDmwOrg5tDmwOrQ6uDm0Orw5uDm0Org6vDm4OsA5vDm4Orw6wDm8OsQ5wDm8OsA6xDnAOsg5xDnAOsQ6yDnEOsw5yDnEOsg6zDnIOtA5zDnIOsw60DnMOtQ50DnMOtA61DnQOtg51DnQOtQ62DnUOtw52DnUOtg63DnYOuA53DnYOtw64DncOuQ54DncOuA65DnkOuw56DnkOug67DnoOvA57DnoOuw68DnsOvQ58DnsOvA69DnwOvg59DnwOvQ6+Dn0Ovw5+Dn0Ovg6/Dn4OwA5/Dn4Ovw7ADn8OwQ6ADn8OwA7BDoAOwg6BDoAOwQ7CDoEOww6CDoEOwg7DDoIOxA6DDoIOww7EDoMOxQ6EDoMOxA7FDoQOxg6FDoQOxQ7GDoUOxw6GDoUOxg7HDoYOyA6HDoYOxw7IDocOyQ6IDocOyA7JDogOyg6JDogOyQ7KDokOyw6KDokOyg7LDooOzA6LDooOyw7MDosOzQ6MDosOzA7NDowOzg6NDowOzQ7ODo0Ozw6ODo0Ozg7PDo4O0A6PDo4Ozw7QDo8O0Q6QDo8O0A7RDpAO0g6RDpAO0Q7SDpEO0w6SDpEO0g7TDpIO1A6TDpIO0w7UDpMO1Q6UDpMO1A7VDpQO1g6VDpQO1Q7WDpUO1w6WDpUO1g7XDpYO2A6XDpYO1w7YDpcO2Q6YDpcO2A7ZDpgO2g6ZDpgO2Q7aDpkO2w6aDpkO2g7bDpoO3A6bDpoO2w7cDpsO3Q6cDpsO3A7dDpwO3g6dDpwO3Q7eDp0O3w6eDp0O3g7fDp4O4A6fDp4O3w7gDp8O4Q6gDp8O4A7hDqAO4g6hDqAO4Q7iDqEO4w6iDqEO4g7jDqIO5A6jDqIO4w7kDqMO5Q6kDqMO5A7lDqQO5g6lDqQO5Q7mDqUO5w6mDqUO5g7nDqYO6A6nDqYO5w7oDqcO6Q6oDqcO6A7pDqgO6g6pDqgO6Q7qDqkO6w6qDqkO6g7rDqoO7A6rDqoO6w7sDqsO7Q6sDqsO7A7tDqwO7g6tDqwO7Q7uDq0O7w6uDq0O7g7vDq4O8A6vDq4O7w7wDq8O8Q6wDq8O8A7xDrAO8g6xDrAO8Q7yDrEO8w6yDrEO8g7zDrIO9A6zDrIO8w70DrMO9Q60DrMO9A71DrQO9g61DrQO9Q72DrUO9w62DrUO9g73DrYO+A63DrYO9w74DrcO+Q64DrcO+A75DrgO+g65DrgO+Q76DroO/A67DroO+w78DrsO/Q68DrsO/A79DrwO/g69DrwO/Q7+Dr0O/w6+Dr0O/g7/Dr4OAA+/Dr4O/w4AD78OAQ/ADr8OAA8BD8AOAg/BDsAOAQ8CD8EOAw/CDsEOAg8DD8IOBA/DDsIOAw8ED8MOBQ/EDsMOBA8FD8QOBg/FDsQOBQ8GD8UOBw/GDsUOBg8HD8YOCA/HDsYOBw8ID8cOCQ/IDscOCA8JD8gOCg/JDsgOCQ8KD8kOCw/KDskOCg8LD8oODA/LDsoOCw8MD8sODQ/MDssODA8ND8wODg/NDswODQ8OD80ODw/ODs0ODg8PD84OEA/PDs4ODw8QD88OEQ/QDs8OEA8RD9AOEg/RDtAOEQ8SD9EOEw/SDtEOEg8TD9IOFA/TDtIOEw8UD9MOFQ/UDtMOFA8VD9QOFg/VDtQOFQ8WD9UOFw/WDtUOFg8XD9YOGA/XDtYOFw8YD9cOGQ/YDtcOGA8ZD9gOGg/ZDtgOGQ8aD9kOGw/aDtkOGg8bD9oOHA/bDtoOGw8cD9sOHQ/cDtsOHA8dD9wOHg/dDtwOHQ8eD90OHw/eDt0OHg8fD94OIA/fDt4OHw8gD98OIQ/gDt8OIA8hD+AOIg/hDuAOIQ8iD+EOIw/iDuEOIg8jD+IOJA/jDuIOIw8kD+MOJQ/kDuMOJA8lD+QOJg/lDuQOJQ8mD+UOJw/mDuUOJg8nD+YOKA/nDuYOJw8oD+cOKQ/oDucOKA8pD+gOKg/pDugOKQ8qD+kOKw/qDukOKg8rD+oOLA/rDuoOKw8sD+sOLQ/sDusOLA8tD+wOLg/tDuwOLQ8uD+0OLw/uDu0OLg8vD+4OMA/vDu4OLw8wD+8OMQ/wDu8OMA8xD/AOMg/xDvAOMQ8yD/EOMw/yDvEOMg8zD/IONA/zDvIOMw80D/MONQ/0DvMONA81D/QONg/1DvQONQ82D/UONw/2DvUONg83D/YOOA/3DvYONw84D/cOOQ/4DvcOOA85D/gOOg/5DvgOOQ86D/kOOw/6DvkOOg87D/sOPQ/8DvsOPA89D/wOPg/9DvwOPQ8+D/0OPw/+Dv0OPg8/D/4OQA//Dv4OPw9AD/8OQQ8AD/8OQA9BDwAPQg8BDwAPQQ9CDwEPQw8CDwEPQg9DDwIPRA8DDwIPQw9EDwMPRQ8EDwMPRA9FDwQPRg8FDwQPRQ9GDwUPRw8GDwUPRg9HDwYPSA8HDwYPRw9IDwcPSQ8IDwcPSA9JDwgPSg8JDwgPSQ9KDwkPSw8KDwkPSg9LDwoPTA8LDwoPSw9MDwsPTQ8MDwsPTA9NDwwPTg8NDwwPTQ9ODw0PTw8ODw0PTg9PDw4PUA8PDw4PTw9QDw8PUQ8QDw8PUA9RDxAPUg8RDxAPUQ9SDxEPUw8SDxEPUg9TDxIPVA8TDxIPUw9UDxMPVQ8UDxMPVA9VDxQPVg8VDxQPVQ9WDxUPVw8WDxUPVg9XDxYPWA8XDxYPVw9YDxcPWQ8YDxcPWA9ZDxgPWg8ZDxgPWQ9aDxkPWw8aDxkPWg9bDxoPXA8bDxoPWw9cDxsPXQ8cDxsPXA9dDxwPXg8dDxwPXQ9eDx0PXw8eDx0PXg9fDx4PYA8fDx4PXw9gDx8PYQ8gDx8PYA9hDyAPYg8hDyAPYQ9iDyEPYw8iDyEPYg9jDyIPZA8jDyIPYw9kDyMPZQ8kDyMPZA9lDyQPZg8lDyQPZQ9mDyUPZw8mDyUPZg9nDyYPaA8nDyYPZw9oDycPaQ8oDycPaA9pDygPag8pDygPaQ9qDykPaw8qDykPag9rDyoPbA8rDyoPaw9sDysPbQ8sDysPbA9tDywPbg8tDywPbQ9uDy0Pbw8uDy0Pbg9vDy4PcA8vDy4Pbw9wDy8PcQ8wDy8PcA9xDzAPcg8xDzAPcQ9yDzEPcw8yDzEPcg9zDzIPdA8zDzIPcw90DzMPdQ80DzMPdA91DzQPdg81DzQPdQ92DzUPdw82DzUPdg93DzYPeA83DzYPdw94DzcPeQ84DzcPeA95DzgPeg85DzgPeQ96DzkPew86DzkPeg97DzoPfA87DzoPew98DzwPfg89DzwPfQ9+Dz0Pfw8+Dz0Pfg9/Dz4PgA8/Dz4Pfw+ADz8PgQ9ADz8PgA+BD0APgg9BD0APgQ+CD0EPgw9CD0EPgg+DD0IPhA9DD0IPgw+ED0MPhQ9ED0MPhA+FD0QPhg9FD0QPhQ+GD0UPhw9GD0UPhg+HD0YPiA9HD0YPhw+ID0cPiQ9ID0cPiA+JD0gPig9JD0gPiQ+KD0kPiw9KD0kPig+LD0oPjA9LD0oPiw+MD0sPjQ9MD0sPjA+ND0wPjg9ND0wPjQ+OD00Pjw9OD00Pjg+PD04PkA9PD04Pjw+QD08PkQ9QD08PkA+RD1APkg9RD1APkQ+SD1EPkw9SD1EPkg+TD1IPlA9TD1IPkw+UD1MPlQ9UD1MPlA+VD1QPlg9VD1QPlQ+WD1UPlw9WD1UPlg+XD1YPmA9XD1YPlw+YD1cPmQ9YD1cPmA+ZD1gPmg9ZD1gPmQ+aD1kPmw9aD1kPmg+bD1oPnA9bD1oPmw+cD1sPnQ9cD1sPnA+dD1wPng9dD1wPnQ+eD10Pnw9eD10Png+fD14PoA9fD14Pnw+gD18PoQ9gD18PoA+hD2APog9hD2APoQ+iD2EPow9iD2EPog+jD2IPpA9jD2IPow+kD2MPpQ9kD2MPpA+lD2QPpg9lD2QPpQ+mD2UPpw9mD2UPpg+nD2YPqA9nD2YPpw+oD2cPqQ9oD2cPqA+pD2gPqg9pD2gPqQ+qD2kPqw9qD2kPqg+rD2oPrA9rD2oPqw+sD2sPrQ9sD2sPrA+tD2wPrg9tD2wPrQ+uD20Prw9uD20Prg+vD24PsA9vD24Prw+wD28PsQ9wD28PsA+xD3APsg9xD3APsQ+yD3EPsw9yD3EPsg+zD3IPtA9zD3IPsw+0D3MPtQ90D3MPtA+1D3QPtg91D3QPtQ+2D3UPtw92D3UPtg+3D3YPuA93D3YPtw+4D3cPuQ94D3cPuA+5D3gPug95D3gPuQ+6D3kPuw96D3kPug+7D3oPvA97D3oPuw+8D3sPvQ98D3sPvA+9D30Pvw9+D30Pvg+/D34PwA9/D34Pvw/AD38PwQ+AD38PwA/BD4APwg+BD4APwQ/CD4EPww+CD4EPwg/DD4IPxA+DD4IPww/ED4MPxQ+ED4MPxA/FD4QPxg+FD4QPxQ/GD4UPxw+GD4UPxg/HD4YPyA+HD4YPxw/ID4cPyQ+ID4cPyA/JD4gPyg+JD4gPyQ/KD4kPyw+KD4kPyg/LD4oPzA+LD4oPyw/MD4sPzQ+MD4sPzA/ND4wPzg+ND4wPzQ/OD40Pzw+OD40Pzg/PD44P0A+PD44Pzw/QD48P0Q+QD48P0A/RD5AP0g+RD5AP0Q/SD5EP0w+SD5EP0g/TD5IP1A+TD5IP0w/UD5MP1Q+UD5MP1A/VD5QP1g+VD5QP1Q/WD5UP1w+WD5UP1g/XD5YP2A+XD5YP1w/YD5cP2Q+YD5cP2A/ZD5gP2g+ZD5gP2Q/aD5kP2w+aD5kP2g/bD5oP3A+bD5oP2w/cD5sP3Q+cD5sP3A/dD5wP3g+dD5wP3Q/eD50P3w+eD50P3g/fD54P4A+fD54P3w/gD58P4Q+gD58P4A/hD6AP4g+hD6AP4Q/iD6EP4w+iD6EP4g/jD6IP5A+jD6IP4w/kD6MP5Q+kD6MP5A/lD6QP5g+lD6QP5Q/mD6UP5w+mD6UP5g/nD6YP6A+nD6YP5w/oD6cP6Q+oD6cP6A/pD6gP6g+pD6gP6Q/qD6kP6w+qD6kP6g/rD6oP7A+rD6oP6w/sD6sP7Q+sD6sP7A/tD6wP7g+tD6wP7Q/uD60P7w+uD60P7g/vD64P8A+vD64P7w/wD68P8Q+wD68P8A/xD7AP8g+xD7AP8Q/yD7EP8w+yD7EP8g/zD7IP9A+zD7IP8w/0D7MP9Q+0D7MP9A/1D7QP9g+1D7QP9Q/2D7UP9w+2D7UP9g/3D7YP+A+3D7YP9w/4D7cP+Q+4D7cP+A/5D7gP+g+5D7gP+Q/6D7kP+w+6D7kP+g/7D7oP/A+7D7oP+w/8D7sP/Q+8D7sP/A/9D7wP/g+9D7wP/Q/+D74PABC/D74P/w8AEL8PARDAD78PABABEMAPAhDBD8APARACEMEPAxDCD8EPAhADEMIPBBDDD8IPAxAEEMMPBRDED8MPBBAFEMQPBhDFD8QPBRAGEMUPBxDGD8UPBhAHEMYPCBDHD8YPBxAIEMcPCRDID8cPCBAJEMgPChDJD8gPCRAKEMkPCxDKD8kPChALEMoPDBDLD8oPCxAMEMsPDRDMD8sPDBANEMwPDhDND8wPDRAOEM0PDxDOD80PDhAPEM4PEBDPD84PDxAQEM8PERDQD88PEBARENAPEhDRD9APERASENEPExDSD9EPEhATENIPFBDTD9IPExAUENMPFRDUD9MPFBAVENQPFhDVD9QPFRAWENUPFxDWD9UPFhAXENYPGBDXD9YPFxAYENcPGRDYD9cPGBAZENgPGhDZD9gPGRAaENkPGxDaD9kPGhAbENoPHBDbD9oPGxAcENsPHRDcD9sPHBAdENwPHhDdD9wPHRAeEN0PHxDeD90PHhAfEN4PIBDfD94PHxAgEN8PIRDgD98PIBAhEOAPIhDhD+APIRAiEOEPIxDiD+EPIhAjEOIPJBDjD+IPIxAkEOMPJRDkD+MPJBAlEOQPJhDlD+QPJRAmEOUPJxDmD+UPJhAnEOYPKBDnD+YPJxAoEOcPKRDoD+cPKBApEOgPKhDpD+gPKRAqEOkPKxDqD+kPKhArEOoPLBDrD+oPKxAsEOsPLRDsD+sPLBAtEOwPLhDtD+wPLRAuEO0PLxDuD+0PLhAvEO4PMBDvD+4PLxAwEO8PMRDwD+8PMBAxEPAPMhDxD/APMRAyEPEPMxDyD/EPMhAzEPIPNBDzD/IPMxA0EPMPNRD0D/MPNBA1EPQPNhD1D/QPNRA2EPUPNxD2D/UPNhA3EPYPOBD3D/YPNxA4EPcPORD4D/cPOBA5EPgPOhD5D/gPORA6EPkPOxD6D/kPOhA7EPoPPBD7D/oPOxA8EPsPPRD8D/sPPBA9EPwPPhD9D/wPPRA+EP0PPxD+D/0PPhA/EP8PwTAAEP8PwDDBMAAQwjABEAAQwTDCMAEQwzACEAEQwjDDMAIQxDADEAIQwzDEMAMQxTAEEAMQxDDFMAQQxjAFEAQQxTDGMAUQxzAGEAUQxjDHMAYQyDAHEAYQxzDIMAcQyTAIEAcQyDDJMAgQyjAJEAgQyTDKMAkQyzAKEAkQyjDLMAoQzDALEAoQyzDMMAsQzTAMEAsQzDDNMAwQzjANEAwQzTDOMA0QzzAOEA0QzjDPMA4Q0DAPEA4QzzDQMA8Q0TAQEA8Q0DDRMBAQ0jAREBAQ0TDSMBEQ0zASEBEQ0jDTMBIQ1DATEBIQ0zDUMBMQ1TAUEBMQ1DDVMBQQ1jAVEBQQ1TDWMBUQ1zAWEBUQ1jDXMBYQ2DAXEBYQ1zDYMBcQ2TAYEBcQ2DDZMBgQ2jAZEBgQ2TDaMBkQ2zAaEBkQ2jDbMBoQ3DAbEBoQ2zDcMBsQ3TAcEBsQ3DDdMBwQ3jAdEBwQ3TDeMB0Q3zAeEB0Q3jDfMB4Q4DAfEB4Q3zDgMB8Q4TAgEB8Q4DDhMCAQ4jAhECAQ4TDiMCEQ4zAiECEQ4jDjMCIQ5DAjECIQ4zDkMCMQ5TAkECMQ5DDlMCQQ5jAlECQQ5TDmMCUQ5zAmECUQ5jDnMCYQ6DAnECYQ5zDoMCcQ6TAoECcQ6DDpMCgQ6jApECgQ6TDqMCkQ6zAqECkQ6jDrMCoQ7DArECoQ6zDsMCsQ7TAsECsQ7DDtMCwQ7jAtECwQ7TDuMC0Q7zAuEC0Q7jDvMC4Q8DAvEC4Q7zDwMC8Q8TAwEC8Q8DDxMDAQ8jAxEDAQ8TDyMDEQ8zAyEDEQ8jDzMDIQ9DAzEDIQ8zD0MDMQ9TA0EDMQ9DD1MDQQ9jA1EDQQ9TD2MDUQ9zA2EDUQ9jD3MDYQ+DA3EDYQ9zD4MDcQ+TA4EDcQ+DD5MDgQ+jA5EDgQ+TD6MDkQ+zA6EDkQ+jD7MDoQ/DA7EDoQ+zD8MDsQ/TA8EDsQ/DD9MDwQ/jA9EDwQ/TD+MD0Q/zA+ED0Q/jD/MD4QADE/ED4Q/zAAMUAQghBBEEAQgRCCEEEQgxBCEEEQghCDEEIQhBBDEEIQgxCEEEMQhRBEEEMQhBCFEEQQhhBFEEQQhRCGEEUQhxBGEEUQhhCHEEYQiBBHEEYQhxCIEEcQiRBIEEcQiBCJEEgQihBJEEgQiRCKEEkQixBKEEkQihCLEEoQjBBLEEoQixCMEEsQjRBMEEsQjBCNEEwQjhBNEEwQjRCOEE0QjxBOEE0QjhCPEE4QkBBPEE4QjxCQEE8QkRBQEE8QkBCREFAQkhBREFAQkRCSEFEQkxBSEFEQkhCTEFIQlBBTEFIQkxCUEFMQlRBUEFMQlBCVEFQQlhBVEFQQlRCWEFUQlxBWEFUQlhCXEFYQmBBXEFYQlxCYEFcQmRBYEFcQmBCZEFgQmhBZEFgQmRCaEFkQmxBaEFkQmhCbEFoQnBBbEFoQmxCcEFsQnRBcEFsQnBCdEFwQnhBdEFwQnRCeEF0QnxBeEF0QnhCfEF4QoBBfEF4QnxCgEF8QoRBgEF8QoBChEGAQohBhEGAQoRCiEGEQoxBiEGEQohCjEGIQpBBjEGIQoxCkEGMQpRBkEGMQpBClEGQQphBlEGQQpRCmEGUQpxBmEGUQphCnEGYQqBBnEGYQpxCoEGcQqRBoEGcQqBCpEGgQqhBpEGgQqRCqEGkQqxBqEGkQqhCrEGoQrBBrEGoQqxCsEGsQrRBsEGsQrBCtEGwQrhBtEGwQrRCuEG0QrxBuEG0QrhCvEG4QsBBvEG4QrxCwEG8QsRBwEG8QsBCxEHAQshBxEHAQsRCyEHEQsxByEHEQshCzEHIQtBBzEHIQsxC0EHMQtRB0EHMQtBC1EHQQthB1EHQQtRC2EHUQtxB2EHUQthC3EHYQuBB3EHYQtxC4EHcQuRB4EHcQuBC5EHgQuhB5EHgQuRC6EHkQuxB6EHkQuhC7EHoQvBB7EHoQuxC8EHsQvRB8EHsQvBC9EHwQvhB9EHwQvRC+EH0QvxB+EH0QvhC/EH4QwBB/EH4QvxDAEH8QwRCAEH8QwBDBEIEQwxCCEIEQwhDDEIIQxBCDEIIQwxDEEIMQxRCEEIMQxBDFEIQQxhCFEIQQxRDGEIUQxxCGEIUQxhDHEIYQyBCHEIYQxxDIEIcQyRCIEIcQyBDJEIgQyhCJEIgQyRDKEIkQyxCKEIkQyhDLEIoQzBCLEIoQyxDMEIsQzRCMEIsQzBDNEIwQzhCNEIwQzRDOEI0QzxCOEI0QzhDPEI4Q0BCPEI4QzxDQEI8Q0RCQEI8Q0BDREJAQ0hCREJAQ0RDSEJEQ0xCSEJEQ0hDTEJIQ1BCTEJIQ0xDUEJMQ1RCUEJMQ1BDVEJQQ1hCVEJQQ1RDWEJUQ1xCWEJUQ1hDXEJYQ2BCXEJYQ1xDYEJcQ2RCYEJcQ2BDZEJgQ2hCZEJgQ2RDaEJkQ2xCaEJkQ2hDbEJoQ3BCbEJoQ2xDcEJsQ3RCcEJsQ3BDdEJwQ3hCdEJwQ3RDeEJ0Q3xCeEJ0Q3hDfEJ4Q4BCfEJ4Q3xDgEJ8Q4RCgEJ8Q4BDhEKAQ4hChEKAQ4RDiEKEQ4xCiEKEQ4hDjEKIQ5BCjEKIQ4xDkEKMQ5RCkEKMQ5BDlEKQQ5hClEKQQ5RDmEKUQ5xCmEKUQ5hDnEKYQ6BCnEKYQ5xDoEKcQ6RCoEKcQ6BDpEKgQ6hCpEKgQ6RDqEKkQ6xCqEKkQ6hDrEKoQ7BCrEKoQ6xDsEKsQ7RCsEKsQ7BDtEKwQ7hCtEKwQ7RDuEK0Q7xCuEK0Q7hDvEK4Q8BCvEK4Q7xDwEK8Q8RCwEK8Q8BDxELAQ8hCxELAQ8RDyELEQ8xCyELEQ8hDzELIQ9BCzELIQ8xD0ELMQ9RC0ELMQ9BD1ELQQ9hC1ELQQ9RD2ELUQ9xC2ELUQ9hD3ELYQ+BC3ELYQ9xD4ELcQ+RC4ELcQ+BD5ELgQ+hC5ELgQ+RD6ELkQ+xC6ELkQ+hD7ELoQ/BC7ELoQ+xD8ELsQ/RC8ELsQ/BD9ELwQ/hC9ELwQ/RD+EL0Q/xC+EL0Q/hD/EL4QABG/EL4Q/xAAEb8QARHAEL8QABEBEcAQAhHBEMAQARECEcIQBBHDEMIQAxEEEcMQBRHEEMMQBBEFEcQQBhHFEMQQBREGEcUQBxHGEMUQBhEHEcYQCBHHEMYQBxEIEccQCRHIEMcQCBEJEcgQChHJEMgQCREKEckQCxHKEMkQChELEcoQDBHLEMoQCxEMEcsQDRHMEMsQDBENEcwQDhHNEMwQDREOEc0QDxHOEM0QDhEPEc4QEBHPEM4QDxEQEc8QERHQEM8QEBEREdAQEhHRENAQERESEdEQExHSENEQEhETEdIQFBHTENIQExEUEdMQFRHUENMQFBEVEdQQFhHVENQQFREWEdUQFxHWENUQFhEXEdYQGBHXENYQFxEYEdcQGRHYENcQGBEZEdgQGhHZENgQGREaEdkQGxHaENkQGhEbEdoQHBHbENoQGxEcEdsQHRHcENsQHBEdEdwQHhHdENwQHREeEd0QHxHeEN0QHhEfEd4QIBHfEN4QHxEgEd8QIRHgEN8QIBEhEeAQIhHhEOAQIREiEeEQIxHiEOEQIhEjEeIQJBHjEOIQIxEkEeMQJRHkEOMQJBElEeQQJhHlEOQQJREmEeUQJxHmEOUQJhEnEeYQKBHnEOYQJxEoEecQKRHoEOcQKBEpEegQKhHpEOgQKREqEekQKxHqEOkQKhErEeoQLBHrEOoQKxEsEesQLRHsEOsQLBEtEewQLhHtEOwQLREuEe0QLxHuEO0QLhEvEe4QMBHvEO4QLxEwEe8QMRHwEO8QMBExEfAQMhHxEPAQMREyEfEQMxHyEPEQMhEzEfIQNBHzEPIQMxE0EfMQNRH0EPMQNBE1EfQQNhH1EPQQNRE2EfUQNxH2EPUQNhE3EfYQOBH3EPYQNxE4EfcQORH4EPcQOBE5EfgQOhH5EPgQORE6EfkQOxH6EPkQOhE7EfoQPBH7EPoQOxE8EfsQPRH8EPsQPBE9EfwQPhH9EPwQPRE+Ef0QPxH+EP0QPhE/Ef4QQBH/EP4QPxFAEf8QQREAEf8QQBFBEQARQhEBEQARQRFCEQERQxECEQERQhFDEQMRRREEEQMRRBFFEQQRRhEFEQQRRRFGEQURRxEGEQURRhFHEQYRSBEHEQYRRxFIEQcRSREIEQcRSBFJEQgRShEJEQgRSRFKEQkRSxEKEQkRShFLEQoRTBELEQoRSxFMEQsRTREMEQsRTBFNEQwRThENEQwRTRFOEQ0RTxEOEQ0RThFPEQ4RUBEPEQ4RTxFQEQ8RUREQEQ8RUBFRERARUhERERARURFSERERUxESERERUhFTERIRVBETERIRUxFUERMRVREUERMRVBFVERQRVhEVERQRVRFWERURVxEWERURVhFXERYRWBEXERYRVxFYERcRWREYERcRWBFZERgRWhEZERgRWRFaERkRWxEaERkRWhFbERoRXBEbERoRWxFcERsRXREcERsRXBFdERwRXhEdERwRXRFeER0RXxEeER0RXhFfER4RYBEfER4RXxFgER8RYREgER8RYBFhESARYhEhESARYRFiESERYxEiESERYhFjESIRZBEjESIRYxFkESMRZREkESMRZBFlESQRZhElESQRZRFmESURZxEmESURZhFnESYRaBEnESYRZxFoEScRaREoEScRaBFpESgRahEpESgRaRFqESkRaxEqESkRahFrESoRbBErESoRaxFsESsRbREsESsRbBFtESwRbhEtESwRbRFuES0RbxEuES0RbhFvES4RcBEvES4RbxFwES8RcREwES8RcBFxETARchExETARcRFyETERcxEyETERchFzETIRdBEzETIRcxF0ETMRdRE0ETMRdBF1ETQRdhE1ETQRdRF2ETURdxE2ETURdhF3ETYReBE3ETYRdxF4ETcReRE4ETcReBF5ETgRehE5ETgReRF6ETkRexE6ETkRehF7EToRfBE7EToRexF8ETsRfRE8ETsRfBF9ETwRfhE9ETwRfRF+ET0RfxE+ET0RfhF/ET4RgBE/ET4RfxGAET8RgRFAET8RgBGBEUARghFBEUARgRGCEUERgxFCEUERghGDEUIRhBFDEUIRgxGEEUQRhhFFEUQRhRGGEUURhxFGEUURhhGHEUYRiBFHEUYRhxGIEUcRiRFIEUcRiBGJEUgRihFJEUgRiRGKEUkRixFKEUkRihGLEUoRjBFLEUoRixGMEUsRjRFMEUsRjBGNEUwRjhFNEUwRjRGOEU0RjxFOEU0RjhGPEU4RkBFPEU4RjxGQEU8RkRFQEU8RkBGREVARkhFREVARkRGSEVERkxFSEVERkhGTEVIRlBFTEVIRkxGUEVMRlRFUEVMRlBGVEVQRlhFVEVQRlRGWEVURlxFWEVURlhGXEVYRmBFXEVYRlxGYEVcRmRFYEVcRmBGZEVgRmhFZEVgRmRGaEVkRmxFaEVkRmhGbEVoRnBFbEVoRmxGcEVsRnRFcEVsRnBGdEVwRnhFdEVwRnRGeEV0RnxFeEV0RnhGfEV4RoBFfEV4RnxGgEV8RoRFgEV8RoBGhEWARohFhEWARoRGiEWERoxFiEWERohGjEWIRpBFjEWIRoxGkEWMRpRFkEWMRpBGlEWQRphFlEWQRpRGmEWURpxFmEWURphGnEWYRqBFnEWYRpxGoEWcRqRFoEWcRqBGpEWgRqhFpEWgRqRGqEWkRqxFqEWkRqhGrEWoRrBFrEWoRqxGsEWsRrRFsEWsRrBGtEWwRrhFtEWwRrRGuEW0RrxFuEW0RrhGvEW4RsBFvEW4RrxGwEW8RsRFwEW8RsBGxEXARshFxEXARsRGyEXERsxFyEXERshGzEXIRtBFzEXIRsxG0EXMRtRF0EXMRtBG1EXQRthF1EXQRtRG2EXURtxF2EXURthG3EXYRuBF3EXYRtxG4EXcRuRF4EXcRuBG5EXgRuhF5EXgRuRG6EXkRuxF6EXkRuhG7EXoRvBF7EXoRuxG8EXsRvRF8EXsRvBG9EXwRvhF9EXwRvRG+EX0RvxF+EX0RvhG/EX4RwBF/EX4RvxHAEX8RwRGAEX8RwBHBEYARwhGBEYARwRHCEYERwxGCEYERwhHDEYIRxBGDEYIRwxHEEYMRxRGEEYMRxBHFEYURxxGGEYURxhHHEYYRyBGHEYYRxxHIEYcRyRGIEYcRyBHJEYgRyhGJEYgRyRHKEYkRyxGKEYkRyhHLEYoRzBGLEYoRyxHMEYsRzRGMEYsRzBHNEYwRzhGNEYwRzRHOEY0RzxGOEY0R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LxQwFO8TMRTwE+8TMBQxFPATMhTxE/ATMRQyFPETMxTyE/ETMhQzFPITNBTzE/ITMxQ0FPMTNRT0E/MTNBQ1FPQTNhT1E/QTNRQ2FPUTNxT2E/UTNhQ3FPYTOBT3E/YTNxQ4FPcTORT4E/cTOBQ5FPgTOhT5E/gTORQ6FPkTOxT6E/kTOhQ7FPoTPBT7E/oTOxQ8FPsTPRT8E/sTPBQ9FPwTPhT9E/wTPRQ+FP0TPxT+E/0TPhQ/FP4TQBT/E/4TPxRAFP8TQRQAFP8TQBRBFAAUQhQBFAAUQRRCFAEUQxQCFAEUQhRDFAIURBQDFAIUQxREFAMURRQEFAMURBRFFAQURhQFFAQURRRGFAUURxQGFAUURhRHFAYUSBQHFAYURxRIFAcUSRQIFAcUSBRJFAgUShQJFAgUSRRKFAkUSxQKFAkUShRLFAoUTBQLFAoUSxRMFAsUTRQMFAsUTBRNFAwUThQNFAwUTRROFA0UTxQOFA0UThRPFA8UURQQFA8UUBRRFBAUUhQRFBAUURRSFBEUUxQSFBEUUhRTFBIUVBQTFBIUUxRUFBMUVRQUFBMUVBRVFBQUVhQVFBQUVRRWFBUUVxQWFBUUVhRXFBYUWBQXFBYUVxRYFBcUWRQYFBcUWBRZFBgUWhQZFBgUWRRaFBkUWxQaFBkUWhRbFBoUXBQbFBoUWxRcFBsUXRQcFBsUXBRdFBwUXhQdFBwUXRReFB0UXxQeFB0UXhRfFB4UYBQfFB4UXxRgFB8UYRQgFB8UYBRhFCAUYhQhFCAUYRRiFCEUYxQiFCEUYhRjFCIUZBQjFCIUYxRkFCMUZRQkFCMUZBRlFCQUZhQlFCQUZRRmFCUUZxQmFCUUZhRnFCYUaBQnFCYUZxRoFCcUaRQoFCcUaBRpFCgUahQpFCgUaRRqFCkUaxQqFCkUahRrFCoUbBQrFCoUaxRsFCsUbRQsFCsUbBRtFCwUbhQtFCwUbRRuFC0UbxQuFC0UbhRvFC4UcBQvFC4UbxRwFC8UcRQwFC8UcBRxFDAUchQxFDAUcRRyFDEUcxQyFDEUchRzFDIUdBQzFDIUcxR0FDMUdRQ0FDMUdBR1FDQUdhQ1FDQUdRR2FDUUdxQ2FDUUdhR3FDYUeBQ3FDYUdxR4FDcUeRQ4FDcUeBR5FDgUehQ5FDgUeRR6FDkUexQ6FDkUehR7FDoUfBQ7FDoUexR8FDsUfRQ8FDsUfBR9FDwUfhQ9FDwUfRR+FD0UfxQ+FD0UfhR/FD4UgBQ/FD4UfxSAFD8UgRRAFD8UgBSBFEAUghRBFEAUgRSCFEEUgxRCFEEUghSDFEIUhBRDFEIUgxSEFEMUhRREFEMUhBSFFEQUhhRFFEQUhRSGFEUUhxRGFEUUhhSHFEYUiBRHFEYUhxSIFEcUiRRIFEcUiBSJFEgUihRJFEgUiRSKFEkUixRKFEkUihSLFEoUjBRLFEoUixSMFEsUjRRMFEsUjBSNFEwUjhRNFEwUjRSOFE0UjxROFE0UjhSPFE4UkBRPFE4UjxSQFFAUkhRRFFAUkRSSFFEUkxRSFFEUkhSTFFIUlBRTFFIUkxSUFFMUlRRUFFMUlBSVFFQUlhRVFFQUlRSWFFUUlxRWFFUUlhSXFFYUmBRXFFYUlxSYFFcUmRRYFFcUmBSZFFgUmhRZFFgUmRSaFFkUmxRaFFkUmhSbFFoUnBRbFFoUmxScFFsUnRRcFFsUnBSdFFwUnhRdFFwUnRSeFF0UnxReFF0UnhSfFF4UoBRfFF4UnxSgFF8UoRRgFF8UoBShFGAUohRhFGAUoRSiFGEUoxRiFGEUohSjFGIUpBRjFGIUoxSkFGMUpRRkFGMUpBSlFGQUphRlFGQUpRSmFGUUpxRmFGUUphSnFGYUqBRnFGYUpxSoFGcUqRRoFGcUqBSpFGgUqhRpFGgUqRSqFGkUqxRqFGkUqhSrFGoUrBRrFGoUqxSsFGsUrRRsFGsUrBStFGwUrhRtFGwUrRSuFG0UrxRuFG0UrhSvFG4UsBRvFG4UrxSwFG8UsRRwFG8UsBSxFHAUshRxFHAUsRSyFHEUsxRyFHEUshSzFHIUtBRzFHIUsxS0FHMUtRR0FHMUtBS1FHQUthR1FHQUtRS2FHUUtxR2FHUUthS3FHYUuBR3FHYUtxS4FHcUuRR4FHcUuBS5FHgUuhR5FHgUuRS6FHkUuxR6FHkUuhS7FHoUvBR7FHoUuxS8FHsUvRR8FHsUvBS9FHwUvhR9FHwUvRS+FH0UvxR+FH0UvhS/FH4UwBR/FH4UvxTAFH8UwRSAFH8UwBTBFIAUwhSBFIAUwRTCFIEUwxSCFIEUwhTDFIIUxBSDFIIUwxTEFIMUxRSEFIMUxBTFFIQUxhSFFIQUxRTGFIUUxxSGFIUUxhTHFIYUyBSHFIYUxxTIFIcUyRSIFIcUyBTJFIgUyhSJFIgUyRTKFIkUyxSKFIkUyhTLFIoUzBSLFIoUyxTMFIsUzRSMFIsUzBTNFIwUzhSNFIwUzRTOFI0UzxSOFI0UzhTPFI4U0BSPFI4UzxTQFI8U0RSQFI8U0BTRFJEU0xSSFJEU0hTTFJIU1BSTFJIU0xTUFJMU1RSUFJMU1BTVFJQU1hSVFJQU1RTWFJUU1xSWFJUU1hTXFJYU2BSXFJYU1xTYFJcU2RSYFJcU2BTZFJgU2hSZFJgU2RTaFJkU2xSaFJkU2hTbFJoU3BSbFJoU2xTcFJsU3RScFJsU3BTdFJwU3hSdFJwU3RTeFJ0U3xSeFJ0U3hTfFJ4U4BSfFJ4U3xTgFJ8U4RSgFJ8U4BThFKAU4hShFKAU4RTiFKEU4xSiFKEU4hTjFKIU5BSjFKIU4xTkFKMU5RSkFKMU5BTlFKQU5hSlFKQU5RTmFKUU5xSmFKUU5hTnFKYU6BSnFKYU5xToFKcU6RSoFKcU6BTpFKgU6hSpFKgU6RTqFKkU6xSqFKkU6hTrFKoU7BSrFKoU6xTsFKsU7RSsFKsU7BTtFKwU7hStFKwU7RTuFK0U7xSuFK0U7hTvFK4U8BSvFK4U7xTwFK8U8RSwFK8U8BTxFLAU8hSxFLAU8RTyFLEU8xSyFLEU8hTzFLIU9BSzFLIU8xT0FLMU9RS0FLMU9BT1FLQU9hS1FLQU9RT2FLUU9xS2FLUU9hT3FLYU+BS3FLYU9xT4FLcU+RS4FLcU+BT5FLgU+hS5FLgU+RT6FLkU+xS6FLkU+hT7FLoU/BS7FLoU+xT8FLsU/RS8FLsU/BT9FLwU/hS9FLwU/RT+FL0U/xS+FL0U/hT/FL4UABW/FL4U/xQAFb8UARXAFL8UABUBFcAUAhXBFMAUARUCFcEUAxXCFMEUAhUDFcIUBBXDFMIUAxUEFcMUBRXEFMMUBBUFFcQUBhXFFMQUBRUGFcUUBxXGFMUUBhUHFcYUCBXHFMYUBxUIFccUCRXIFMcUCBUJFcgUChXJFMgUCRUKFckUCxXKFMkUChULFcoUDBXLFMoUCxUMFcsUDRXMFMsUDBUNFcwUDhXNFMwUDRUOFc0UDxXOFM0UDhUPFc4UEBXPFM4UDxUQFc8UERXQFM8UEBURFdAUEhXRFNAUERUSFdIUFBXTFNIUExUUFdMUFRXUFNMUFBUVFdQUFhXVFNQUFRUWFdUUFxXWFNUUFhUXFdYUGBXXFNYUFxUYFdcUGRXYFNcUGBUZFdgUGhXZFNgUGRUaFdkUGxXaFNkUGhUbFdoUHBXbFNoUGxUcFdsUHRXcFNsUHBUdFdwUHhXdFNwUHRUeFd0UHxXeFN0UHhUfFd4UIBXfFN4UHxUgFd8UIRXgFN8UIBUhFeAUIhXhFOAUIRUiFeEUIxXiFOEUIhUjFeIUJBXjFOIUIxUkFeMUJRXkFOMUJBUlFeQUJhXlFOQUJRUmFeUUJxXmFOUUJhUnFeYUKBXnFOYUJxUoFecUKRXoFOcUKBUpFegUKhXpFOgUKRUqFekUKxXqFOkUKhUrFeoULBXrFOoUKxUsFesULRXsFOsULBUtFewULhXtFOwULRUuFe0ULxXuFO0ULhUvFe4UMBXvFO4ULxUwFe8UMRXwFO8UMBUxFfAUMhXxFPAUMRUyFfEUMxXyFPEUMhUzFfIUNBXzFPIUMxU0FfMUNRX0FPMUNBU1FfQUNhX1FPQUNRU2FfUUNxX2FPUUNhU3FfYUOBX3FPYUNxU4FfcUORX4FPcUOBU5FfgUOhX5FPgUORU6FfkUOxX6FPkUOhU7FfoUPBX7FPoUOxU8FfsUPRX8FPsUPBU9FfwUPhX9FPwUPRU+Ff0UPxX+FP0UPhU/Ff4UQBX/FP4UPxVAFf8UQRUAFf8UQBVBFQAVQhUBFQAVQRVCFQEVQxUCFQEVQhVDFQIVRBUDFQIVQxVEFQMVRRUEFQMVRBVFFQQVRhUFFQQVRRVGFQUVRxUGFQUVRhVHFQYVSBUHFQYVRxVIFQcVSRUIFQcVSBVJFQgVShUJFQgVSRVKFQkVSxUKFQkVShVLFQoVTBULFQoVSxVMFQsVTRUMFQsVTBVNFQwVThUNFQwVTRVOFQ0VTxUOFQ0VThVPFQ4VUBUPFQ4VTxVQFQ8VURUQFQ8VUBVRFRAVUhURFRAVURVSFREVUxUSFREVUhVTFRMVVRUUFRMVVBVVFRQVVhUVFRQVVRVWFRUVVxUWFRUVVhVXFRYVWBUXFRYVVxVYFRcVWRUYFRcVWBVZFRgVWhUZFRgVWRVaFRkVWxUaFRkVWhVbFRoVXBUbFRoVWxVcFRsVXRUcFRsVXBVdFRwVXhUdFRwVXRVeFR0VXxUeFR0VXhVfFR4VYBUfFR4VXxVgFR8VYRUgFR8VYBVhFSAVYhUhFSAVYRViFSEVYxUiFSEVYhVjFSIVZBUjFSIVYxVkFSMVZRUkFSMVZBVlFSQVZhUlFSQVZRVmFSUVZxUmFSUVZhVnFSYVaBUnFSYVZxVoFScVaRUoFScVaBVpFSgVahUpFSgVaRVqFSkVaxUqFSkVahVrFSoVbBUrFSoVaxVsFSsVbRUsFSsVbBVtFSwVbhUtFSwVbRVuFS0VbxUuFS0VbhVvFS4VcBUvFS4VbxVwFS8VcRUwFS8VcBVxFTAVchUxFTAVcRVyFTEVcxUyFTEVchVzFTIVdBUzFTIVcxV0FTMVdRU0FTMVdBV1FTQVdhU1FTQVdRV2FTUVdxU2FTUVdhV3FTYVeBU3FTYVdxV4FTcVeRU4FTcVeBV5FTgVehU5FTgVeRV6FTkVexU6FTkVehV7FToVfBU7FToVexV8FTsVfRU8FTsVfBV9FTwVfhU9FTwVfRV+FT0VfxU+FT0VfhV/FT4VgBU/FT4VfxWAFT8VgRVAFT8VgBWBFUAVghVBFUAVgRWCFUEVgxVCFUEVghWDFUIVhBVDFUIVgxWEFUMVhRVEFUMVhBWFFUQVhhVFFUQVhRWGFUUVhxVGFUUVhhWHFUYViBVHFUYVhxWIFUcViRVIFUcViBWJFUgVihVJFUgViRWKFUkVixVKFUkVihWLFUoVjBVLFUoVixWMFUsVjRVMFUsVjBWNFUwVjhVNFUwVjRWOFU0VjxVOFU0VjhWPFU4VkBVPFU4VjxWQFU8VkRVQFU8VkBWRFVAVkhVRFVAVkRWSFVEVkxVSFVEVkhWTFVIVlBVTFVIVkxWUFVQVlhVVFVQVlRWWFVUVlxVWFVUVlhWXFVYVmBVXFVYVlxWYFVcVmRVYFVcVmBWZFVgVmhVZFVgVmRWaFVkVmxVaFVkVmhWbFVoVnBVbFVoVmxWcFVsVnRVcFVsVnBWdFVwVnhVdFVwVnRWeFV0VnxVeFV0VnhWfFV4VoBVfFV4VnxWgFV8VoRVgFV8VoBWhFWAVohVhFWAVoRWiFWEVoxViFWEVohWjFWIVpBVjFWIVoxWkFWMVpRVkFWMVpBWlFWQVphVlFWQVpRWmFWUVpxVmFWUVphWnFWYVqBVnFWYVpxWoFWcVqRVoFWcVqBWpFWgVqhVpFWgVqRWqFWkVqxVqFWkVqhWrFWoVrBVrFWoVqxWsFWsVrRVsFWsVrBWtFWwVrhVtFWwVrRWuFW0VrxVuFW0VrhWvFW4VsBVvFW4VrxWwFW8VsRVwFW8VsBWxFXAVshVxFXAVsRWyFXEVsxVyFXEVshWzFXIVtBVzFXIVsxW0FXMVtRV0FXMVtBW1FXQVthV1FXQVtRW2FXUVtxV2FXUVthW3FXYVuBV3FXYVtxW4FXcVuRV4FXcVuBW5FXgVuhV5FXgVuRW6FXkVuxV6FXkVuhW7FXoVvBV7FXoVuxW8FXsVvRV8FXsVvBW9FXwVvhV9FXwVvRW+FX0VvxV+FX0VvhW/FX4VwBV/FX4VvxXAFX8VwRWAFX8VwBXBFYAVwhWBFYAVwRXCFYEVwxWCFYEVwhXDFYIVxBWDFYIVwxXEFYMVxRWEFYMVxBXFFYQVxhWFFYQVxRXGFYUVxxWGFYUVxhXHFYYVyBWHFYYVxxXIFYcVyRWIFYcVyBXJFYgVyhWJFYgVyRXKFYkVyxWKFYkVyhXLFYoVzBWLFYoVyxXMFYsVzRWMFYsVzBXNFYwVzhWNFYwVzRXOFY0VzxWOFY0VzhXPFY4V0BWPFY4VzxXQFY8V0RWQFY8V0BXRFZAV0hWRFZAV0RXSFZEV0xWSFZEV0hXTFZIV1BWTFZIV0xXUFZMV1RWUFZMV1BXVFZUV1xWWFZUV1hXXFZYV2BWXFZYV1xXYFZcV2RWYFZcV2BXZFZgV2hWZFZgV2RXaFZkV2xWaFZkV2hXbFZoV3BWbFZoV2xXcFZsV3RWcFZsV3BXdFZwV3hWdFZwV3RXeFZ0V3xWeFZ0V3hXfFZ4V4BWfFZ4V3xXgFZ8V4RWgFZ8V4BXhFaAV4hWhFaAV4RXiFaEV4xWiFaEV4hXjFaIV5BWjFaIV4xXkFaMV5RWkFaMV5BXlFaQV5hWlFaQV5RXmFaUV5xWmFaUV5hXnFaYV6BWnFaYV5xXoFacV6RWoFacV6BXpFagV6hWpFagV6RXqFakV6xWqFakV6hXrFaoV7BWrFaoV6xXsFasV7RWsFasV7BXtFawV7hWtFawV7RXuFa0V7xWuFa0V7hXvFa4V8BWvFa4V7xXwFa8V8RWwFa8V8BXxFbAV8hWxFbAV8RXyFbEV8xWyFbEV8hXzFbIV9BWzFbIV8xX0FbMV9RW0FbMV9BX1FbQV9hW1FbQV9RX2FbUV9xW2FbUV9hX3FbYV+BW3FbYV9xX4FbcV+RW4FbcV+BX5FbgV+hW5FbgV+RX6FbkV+xW6FbkV+hX7FboV/BW7FboV+xX8FbsV/RW8FbsV/BX9FbwV/hW9FbwV/RX+Fb0V/xW+Fb0V/hX/Fb4VABa/Fb4V/xUAFr8VARbAFb8VABYBFsAVAhbBFcAVARYCFsEVAxbCFcEVAhYDFsIVBBbDFcIVAxYEFsMVBRbEFcMVBBYFFsQVBhbFFcQVBRYGFsUVBxbGFcUVBhYHFsYVCBbHFcYVBxYIFscVCRbIFccVCBYJFsgVChbJFcgVCRYKFskVCxbKFckVChYLFsoVDBbLFcoVCxYMFssVDRbMFcsVDBYNFswVDhbNFcwVDRYOFs0VDxbOFc0VDhYPFs4VEBbPFc4VDxYQFs8VERbQFc8VEBYRFtAVEhbRFdAVERYSFtEVExbSFdEVEhYTFtIVFBbTFdIVExYUFtMVFRbUFdMVFBYVFtQVFhbVFdQVFRYWFtYVGBbXFdYVFxYYFtcVGRbYFdcVGBYZFtgVGhbZFdgVGRYaFtkVGxbaFdkVGhYbFtoVHBbbFdoVGxYcFtsVHRbcFdsVHBYdFtwVHhbdFdwVHRYeFt0VHxbeFd0VHhYfFt4VIBbfFd4VHxYgFt8VIRbgFd8VIBYhFuAVIhbhFeAVIRYiFuEVIxbiFeEVIhYjFuIVJBbjFeIVIxYkFuMVJRbkFeMVJBYlFuQVJhblFeQVJRYmFuUVJxbmFeUVJhYnFuYVKBbnFeYVJxYoFucVKRboFecVKBYpFugVKhbpFegVKRYqFukVKxbqFekVKhYrFuoVLBbrFeoVKxYsFusVLRbsFesVLBYtFuwVLhbtFewVLRYuFu0VLxbuFe0VLhYvFu4VMBbvFe4VLxYwFu8VMRbwFe8VMBYxFvAVMhbxFfAVMRYyFvEVMxbyFfEVMhYzFvIVNBbzFfIVMxY0FvMVNRb0FfMVNBY1FvQVNhb1FfQVNRY2FvUVNxb2FfUVNhY3FvYVOBb3FfYVNxY4FvcVORb4FfcVOBY5FvgVOhb5FfgVORY6FvkVOxb6FfkVOhY7FvoVPBb7FfoVOxY8FvsVPRb8FfsVPBY9FvwVPhb9FfwVPRY+Fv0VPxb+Ff0VPhY/Fv4VQBb/Ff4VPxZAFv8VQRYAFv8VQBZBFgAWQhYBFgAWQRZCFgEWQxYCFgEWQhZDFgIWRBYDFgIWQxZEFgMWRRYEFgMWRBZFFgQWRhYFFgQWRRZGFgUWRxYGFgUWRhZHFgYWSBYHFgYWRxZIFgcWSRYIFgcWSBZJFggWShYJFggWSRZKFgkWSxYKFgkWShZLFgoWTBYLFgoWSxZMFgsWTRYMFgsWTBZNFgwWThYNFgwWTRZOFg0WTxYOFg0WThZPFg4WUBYPFg4WTxZQFg8WURYQFg8WUBZRFhAWUhYRFhAWURZSFhEWUxYSFhEWUhZTFhIWVBYTFhIWUxZUFhMWVRYUFhMWVBZVFhQWVhYVFhQWVRZWFhUWVxYWFhUWVhZXFhcWWRYYFhcWWBZZFhgWWhYZFhgWWRZaFhkWWxYaFhkWWhZbFhoWXBYbFhoWWxZcFhsWXRYcFhsWXBZdFhwWXhYdFhwWXRZeFh0WXxYeFh0WXhZfFh4WYBYfFh4WXxZgFh8WYRYgFh8WYBZhFiAWYhYhFiAWYRZiFiEWYxYiFiEWYhZjFiIWZBYjFiIWYxZkFiMWZRYkFiMWZBZlFiQWZhYlFiQWZRZmFiUWZxYmFiUWZhZnFiYWaBYnFiYWZxZoFicWaRYoFicWaBZpFigWahYpFigWaRZqFikWaxYqFikWahZrFioWbBYrFioWaxZsFisWbRYsFisWbBZtFiwWbhYtFiwWbRZuFi0WbxYuFi0WbhZvFi4WcBYvFi4WbxZwFi8WcRYwFi8WcBZxFjAWchYxFjAWcRZyFjEWcxYyFjEWchZzFjIWdBYzFjIWcxZ0FjMWdRY0FjMWdBZ1FjQWdhY1FjQWdRZ2FjUWdxY2FjUWdhZ3FjYWeBY3FjYWdxZ4FjcWeRY4FjcWeBZ5FjgWehY5FjgWeRZ6FjkWexY6FjkWehZ7FjoWfBY7FjoWexZ8FjsWfRY8FjsWfBZ9FjwWfhY9FjwWfRZ+Fj0WfxY+Fj0WfhZ/Fj4WgBY/Fj4WfxaAFj8WgRZAFj8WgBaBFkAWghZBFkAWgRaCFkEWgxZCFkEWghaDFkIWhBZDFkIWgxaEFkMWhRZEFkMWhBaFFkQWhhZFFkQWhRaGFkUWhxZGFkUWhhaHFkYWiBZHFkYWhxaIFkcWiRZIFkcWiBaJFkgWihZJFkgWiRaKFkkWixZKFkkWihaLFkoWjBZLFkoWixaMFksWjRZMFksWjBaNFkwWjhZNFkwWjRaOFk0WjxZOFk0WjhaPFk4WkBZPFk4WjxaQFk8WkRZQFk8WkBaRFlAWkhZRFlAWkRaSFlEWkxZSFlEWkhaTFlIWlBZTFlIWkxaUFlMWlRZUFlMWlBaVFlQWlhZVFlQWlRaWFlUWlxZWFlUWlhaXFlYWmBZXFlYWlxaYFlgWmhZZFlgWmRaaFlkWmxZaFlkWmhabFloWnBZbFloWmxacFlsWnRZcFlsWnBadFlwWnhZdFlwWnRaeFl0WnxZeFl0WnhafFl4WoBZfFl4WnxagFl8WoRZgFl8WoBahFmAWohZhFmAWoRaiFmEWoxZiFmEWohajFmIWpBZjFmIWoxakFmMWpRZkFmMWpBalFmQWphZlFmQWpRamFmUWpxZmFmUWphanFmYWqBZnFmYWpxaoFmcWqRZoFmcWqBapFmgWqhZpFmgWqRaqFmkWqxZqFmkWqharFmoWrBZrFmoWqxasFmsWrRZsFmsWrBatFmwWrhZtFmwWrRauFm0WrxZuFm0WrhavFm4WsBZvFm4WrxawFm8WsRZwFm8WsBaxFnAWshZxFnAWsRayFnEWsxZyFnEWshazFnIWtBZzFnIWsxa0FnMWtRZ0FnMWtBa1FnQWthZ1FnQWtRa2FnUWtxZ2FnUWtha3FnYWuBZ3FnYWtxa4FncWuRZ4FncWuBa5FngWuhZ5FngWuRa6FnkWuxZ6FnkWuha7FnoWvBZ7FnoWuxa8FnsWvRZ8FnsWvBa9FnwWvhZ9FnwWvRa+Fn0WvxZ+Fn0Wvha/Fn4WwBZ/Fn4WvxbAFn8WwRaAFn8WwBbBFoAWwhaBFoAWwRbCFoEWwxaCFoEWwhbDFoIWxBaDFoIWwxbEFoMWxRaEFoMWxBbFFoQWxhaFFoQWxRbGFoUWxxaGFoUWxhbHFoYWyBaHFoYWxxbIFocWyRaIFocWyBbJFogWyhaJFogWyRbKFokWyxaKFokWyhbLFooWzBaLFooWyxbMFosWzRaMFosWzBbNFowWzhaNFowWzRbOFo0WzxaOFo0WzhbPFo4W0BaPFo4WzxbQFo8W0RaQFo8W0BbRFpAW0haRFpAW0RbSFpEW0xaSFpEW0hbTFpIW1BaTFpIW0xbUFpMW1RaUFpMW1BbVFpQW1haVFpQW1RbWFpUW1xaWFpUW1hbXFpYW2BaXFpYW1xbYFpcW2RaYFpcW2BbZFpkW2xaaFpkW2hbbFpoW3BabFpoW2xbcFpsW3RacFpsW3BbdFpwW3hadFpwW3RbeFp0W3xaeFp0W3hbfFp4W4BafFp4W3xbgFp8W4RagFp8W4BbhFqAW4hahFqAW4RbiFqEW4xaiFqEW4hbjFqIW5BajFqIW4xbkFqMW5RakFqMW5BblFqQW5halFqQW5RbmFqUW5xamFqUW5hbnFqYW6BanFqYW5xboFqcW6RaoFqcW6BbpFqgW6hapFqgW6RbqFqkW6xaqFqkW6hbrFqoW7BarFqoW6xbsFqsW7RasFqsW7BbtFqwW7hatFqwW7RbuFq0W7xauFq0W7hbvFq4W8BavFq4W7xbwFq8W8RawFq8W8BbxFrAW8haxFrAW8RbyFrEW8xayFrEW8hbzFrIW9BazFrIW8xb0FrMW9Ra0FrMW9Bb1FrQW9ha1FrQW9Rb2FrUW9xa2FrUW9hb3FrYW+Ba3FrYW9xb4FrcW+Ra4FrcW+Bb5FrgW+ha5FrgW+Rb6FrkW+xa6FrkW+hb7FroW/Ba7FroW+xb8FrsW/Ra8FrsW/Bb9FrwW/ha9FrwW/Rb+Fr0W/xa+Fr0W/hb/Fr4WABe/Fr4W/xYAF78WARfAFr8WABcBF8AWAhfBFsAWARcCF8EWAxfCFsEWAhcDF8IWBBfDFsIWAxcEF8MWBRfEFsMWBBcFF8QWBhfFFsQWBRcGF8UWBxfGFsUWBhcHF8YWCBfHFsYWBxcIF8cWCRfIFscWCBcJF8gWChfJFsgWCRcKF8kWCxfKFskWChcLF8oWDBfLFsoWCxcMF8sWDRfMFssWDBcNF8wWDhfNFswWDRcOF80WDxfOFs0WDhcPF84WEBfPFs4WDxcQF88WERfQFs8WEBcRF9AWEhfRFtAWERcSF9EWExfSFtEWEhcTF9IWFBfTFtIWExcUF9MWFRfUFtMWFBcVF9QWFhfVFtQWFRcWF9UWFxfWFtUWFhcXF9YWGBfXFtYWFxcYF9cWGRfYFtcWGBcZF9gWGhfZFtgWGRcaF9oWHBfbFtoWGxccF9sWHRfcFtsWHBcdF9wWHhfdFtwWHRceF90WHxfeFt0WHhcfF94WIBffFt4WHxcgF98WIRfgFt8WIBchF+AWIhfhFuAWIRciF+EWIxfiFuEWIhcjF+IWJBfjFuIWIxckF+MWJRfkFuMWJBclF+QWJhflFuQWJRcmF+UWJxfmFuUWJhcnF+YWKBfnFuYWJxcoF+cWKRfoFucWKBcpF+gWKhfpFugWKRcqF+kWKxfqFukWKhcrF+oWLBfrFuoWKxcsF+sWLRfsFusWLBctF+wWLhftFuwWLRcuF+0WLxfuFu0WLhcvF+4WMBfvFu4WLxcwF+8WMRfwFu8WMBcxF/AWMhfxFvAWMRcyF/EWMxfyFvEWMhczF/IWNBfzFvIWMxc0F/MWNRf0FvMWNBc1F/QWNhf1FvQWNRc2F/UWNxf2FvUWNhc3F/YWOBf3FvYWNxc4F/cWORf4FvcWOBc5F/gWOhf5FvgWORc6F/kWOxf6FvkWOhc7F/oWPBf7FvoWOxc8F/sWPRf8FvsWPBc9F/wWPhf9FvwWPRc+F/0WPxf+Fv0WPhc/F/4WQBf/Fv4WPxdAF/8WQRcAF/8WQBdBFwAXQhcBFwAXQRdCFwEXQxcCFwEXQhdDFwIXRBcDFwIXQxdEFwMXRRcEFwMXRBdFFwQXRhcFFwQXRRdGFwUXRxcGFwUXRhdHFwYXSBcHFwYXRxdIFwcXSRcIFwcXSBdJFwgXShcJFwgXSRdKFwkXSxcKFwkXShdLFwoXTBcLFwoXSxdMFwsXTRcMFwsXTBdNFwwXThcNFwwXTRdOFw0XTxcOFw0XThdPFw4XUBcPFw4XTxdQFw8XURcQFw8XUBdRFxAXUhcRFxAXURdSFxEXUxcSFxEXUhdTFxIXVBcTFxIXUxdUFxMXVRcUFxMXVBdVFxQXVhcVFxQXVRdWFxUXVxcWFxUXVhdXFxYXWBcXFxYXVxdYFxcXWRcYFxcXWBdZFxgXWhcZFxgXWRdaFxkXWxcaFxkXWhdbFxsXXRccFxsXXBddFxwXXhcdFxwXXRdeFx0XXxceFx0XXhdfFx4XYBcfFx4XXxdgFx8XYRcgFx8XYBdhFyAXYhchFyAXYRdiFyEXYxciFyEXYhdjFyIXZBcjFyIXYxdkFyMXZRckFyMXZBdlFyQXZhclFyQXZRdmFyUXZxcmFyUXZhdnFyYXaBcnFyYXZxdoFycXaRcoFycXaBdpFygXahcpFygXaRdqFykXaxcqFykXahdrFyoXbBcrFyoXaxdsFysXbRcsFysXbBdtFywXbhctFywXbRduFy0XbxcuFy0XbhdvFy4XcBcvFy4XbxdwFy8XcRcwFy8XcBdxFzAXchcxFzAXcRdyFzEXcxcyFzEXchdzFzIXdBczFzIXcxd0FzMXdRc0FzMXdBd1FzQXdhc1FzQXdRd2FzUXdxc2FzUXdhd3FzYXeBc3FzYXdxd4FzcXeRc4FzcXeBd5FzgXehc5FzgXeRd6FzkXexc6FzkXehd7FzoXfBc7FzoXexd8FzsXfRc8FzsXfBd9FzwXfhc9FzwXfRd+Fz0Xfxc+Fz0Xfhd/Fz4XgBc/Fz4XfxeAFz8XgRdAFz8XgBeBF0AXghdBF0AXgReCF0EXgxdCF0EXgheDF0IXhBdDF0IXgxeEF0MXhRdEF0MXhBeFF0QXhhdFF0QXhReGF0UXhxdGF0UXhheHF0YXiBdHF0YXhxeIF0cXiRdIF0cXiBeJF0gXihdJF0gXiReKF0kXixdKF0kXiheLF0oXjBdLF0oXixeMF0sXjRdMF0sXjBeNF0wXjhdNF0wXjReOF00XjxdOF00XjhePF04XkBdPF04XjxeQF08XkRdQF08XkBeRF1AXkhdRF1AXkReSF1EXkxdSF1EXkheTF1IXlBdTF1IXkxeUF1MXlRdUF1MXlBeVF1QXlhdVF1QXlReWF1UXlxdWF1UXlheXF1YXmBdXF1YXlxeYF1cXmRdYF1cXmBeZF1gXmhdZF1gXmReaF1kXmxdaF1kXmhebF1oXnBdbF1oXmxecF1wXnhddF1wXnReeF10XnxdeF10XnhefF14XoBdfF14XnxegF18XoRdgF18XoBehF2AXohdhF2AXoReiF2EXoxdiF2EXohejF2IXpBdjF2IXoxekF2MXpRdkF2MXpBelF2QXphdlF2QXpRemF2UXpxdmF2UXphenF2YXqBdnF2YXpxeoF2cXqRdoF2cXqBepF2gXqhdpF2gXqReqF2kXqxdqF2kXqherF2oXrBdrF2oXqxesF2sXrRdsF2sXrBetF2wXrhdtF2wXrReuF20XrxduF20XrhevF24XsBdvF24XrxewF28XsRdwF28XsBexF3AXshdxF3AXsReyF3EXsxdyF3EXshezF3IXtBdzF3IXsxe0F3MXtRd0F3MXtBe1F3QXthd1F3QXtRe2F3UXtxd2F3UXthe3F3YXuBd3F3YXtxe4F3cXuRd4F3cXuBe5F3gXuhd5F3gXuRe6F3kXuxd6F3kXuhe7F3oXvBd7F3oXuxe8F3sXvRd8F3sXvBe9F3wXvhd9F3wXvRe+F30Xvxd+F30Xvhe/F34XwBd/F34XvxfAF38XwReAF38XwBfBF4AXwheBF4AXwRfCF4EXwxeCF4EXwhfDF4IXxBeDF4IXwxfEF4MXxReEF4MXxBfFF4QXxheFF4QXxRfGF4UXxxeGF4UXxhfHF4YXyBeHF4YXxxfIF4cXyReIF4cXyBfJF4gXyheJF4gXyRfKF4kXyxeKF4kXyhfLF4oXzBeLF4oXyxfMF4sXzReMF4sXzBfNF4wXzheNF4wXzRfOF40XzxeOF40XzhfPF44X0BePF44XzxfQF48X0ReQF48X0BfRF5AX0heRF5AX0RfSF5EX0xeSF5EX0hfTF5IX1BeTF5IX0xfUF5MX1ReUF5MX1BfVF5QX1heVF5QX1RfWF5UX1xeWF5UX1hfXF5YX2BeXF5YX1xfYF5cX2ReYF5cX2BfZF5gX2heZF5gX2RfaF5kX2xeaF5kX2hfbF5oX3BebF5oX2xfcF5sX3RecF5sX3BfdF50X3xeeF50X3hffF54X4BefF54X3xfgF58X4RegF58X4BfhF6AX4hehF6AX4RfiF6EX4xeiF6EX4hfjF6IX5BejF6IX4xfkF6MX5RekF6MX5BflF6QX5helF6QX5RfmF6UX5xemF6UX5hfnF6YX6BenF6YX5xfoF6cX6ReoF6cX6BfpF6gX6hepF6gX6RfqF6kX6xeqF6kX6hfrF6oX7BerF6oX6xfsF6sX7ResF6sX7BftF6wX7hetF6wX7RfuF60X7xeuF60X7hfvF64X8BevF64X7xfwF68X8RewF68X8BfxF7AX8hexF7AX8RfyF7EX8xeyF7EX8hfzF7IX9BezF7IX8xf0F7MX9Re0F7MX9Bf1F7QX9he1F7QX9Rf2F7UX9xe2F7UX9hf3F7YX+Be3F7YX9xf4F7cX+Re4F7cX+Bf5F7gX+he5F7gX+Rf6F7kX+xe6F7kX+hf7F7oX/Be7F7oX+xf8F7sX/Re8F7sX/Bf9F7wX/he9F7wX/Rf+F70X/xe+F70X/hf/F74XABi/F74X/xcAGL8XARjAF78XABgBGMAXAhjBF8AXARgCGMEXAxjCF8EXAhgDGMIXBBjDF8IXAxgEGMMXBRjEF8MXBBgFGMQXBhjFF8QXBRgGGMUXBxjGF8UXBhgHGMYXCBjHF8YXBxgIGMcXCRjIF8cXCBgJGMgXChjJF8gXCRgKGMkXCxjKF8kXChgLGMoXDBjLF8oXCxgMGMsXDRjMF8sXDBgNGMwXDhjNF8wXDRgOGM0XDxjOF80XDhgPGM4XEBjPF84XDxgQGM8XERjQF88XEBgRGNAXEhjRF9AXERgSGNEXExjSF9EXEhgTGNIXFBjTF9IXExgUGNMXFRjUF9MXFBgVGNQXFhjVF9QXFRgWGNUXFxjWF9UXFhgXGNYXGBjXF9YXFxgYGNcXGRjYF9cXGBgZGNgXGhjZF9gXGRgaGNkXGxjaF9kXGhgbGNoXHBjbF9oXGxgcGNsXHRjcF9sXHBgdGNwXHhjdF9wXHRgeGN4XIBjfF94XHxggGN8XIRjgF98XIBghGOAXIhjhF+AXIRgiGOEXIxjiF+EXIhgjGOIXJBjjF+IXIxgkGOMXJRjkF+MXJBglGOQXJhjlF+QXJRgmGOUXJxjmF+UXJhgnGOYXKBjnF+YXJxgoGOcXKRjoF+cXKBgpGOgXKhjpF+gXKRgqGOkXKxjqF+kXKhgrGOoXLBjrF+oXKxgsGOsXLRjsF+sXLBgtGOwXLhjtF+wXLRguGO0XLxjuF+0XLhgvGO4XMBjvF+4XLxgwGO8XMRjwF+8XMBgxGPAXMhjxF/AXMRgyGPEXMxjyF/EXMhgzGPIXNBjzF/IXMxg0GPMXNRj0F/MXNBg1GPQXNhj1F/QXNRg2GPUXNxj2F/UXNhg3GPYXOBj3F/YXNxg4GPcXORj4F/cXOBg5GPgXOhj5F/gXORg6GPkXOxj6F/kXOhg7GPoXPBj7F/oXOxg8GPsXPRj8F/sXPBg9GPwXPhj9F/wXPRg+GP0XPxj+F/0XPhg/GP4XQBj/F/4XPxhAGP8XQRgAGP8XQBhBGAAYQhgBGAAYQRhCGAEYQxgCGAEYQhhDGAIYRBgDGAIYQxhEGAMYRRgEGAMYRBhFGAQYRhgFGAQYRRhGGAUYRxgGGAUYRhhHGAYYSBgHGAYYRxhIGAcYSRgIGAcYSBhJGAgYShgJGAgYSRhKGAkYSxgKGAkYShhLGAoYTBgLGAoYSxhMGAsYTRgMGAsYTBhNGAwYThgNGAwYTRhOGA0YTxgOGA0YThhPGA4YUBgPGA4YTxhQGA8YURgQGA8YUBhRGBAYUhgRGBAYURhSGBEYUxgSGBEYUhhTGBIYVBgTGBIYUxhUGBMYVRgUGBMYVBhVGBQYVhgVGBQYVRhWGBUYVxgWGBUYVhhXGBYYWBgXGBYYVxhYGBcYWRgYGBcYWBhZGBgYWhgZGBgYWRhaGBkYWxgaGBkYWhhbGBoYXBgbGBoYWxhcGBsYXRgcGBsYXBhdGBwYXhgdGBwYXRheGB0YXxgeGB0YXhhfGB8YYRggGB8YYBhhGCAYYhghGCAYYRhiGCEYYxgiGCEYYhhjGCIYZBgjGCIYYxhkGCMYZRgkGCMYZBhlGCQYZhglGCQYZRhmGCUYZxgmGCUYZhhnGCYYaBgnGCYYZxhoGCcYaRgoGCcYaBhpGCgYahgpGCgYaRhqGCkYaxgqGCkYahhrGCoYbBgrGCoYaxhsGCsYbRgsGCsYbBhtGCwYbhgtGCwYbRhuGC0YbxguGC0YbhhvGC4YcBgvGC4YbxhwGC8YcRgwGC8YcBhxGDAYchgxGDAYcRhyGDEYcxgyGDEYchhzGDIYdBgzGDIYcxh0GDMYdRg0GDMYdBh1GDQYdhg1GDQYdRh2GDUYdxg2GDUYdhh3GDYYeBg3GDYYdxh4GDcYeRg4GDcYeBh5GDgYehg5GDgYeRh6GDkYexg6GDkYehh7GDoYfBg7GDoYexh8GDsYfRg8GDsYfBh9GDwYfhg9GDwYfRh+GD0Yfxg+GD0Yfhh/GD4YgBg/GD4YfxiAGD8YgRhAGD8YgBiBGEAYghhBGEAYgRiCGEEYgxhCGEEYghiDGEIYhBhDGEIYgxiEGEMYhRhEGEMYhBiFGEQYhhhFGEQYhRiGGEUYhxhGGEUYhhiHGEYYiBhHGEYYhxiIGEcYiRhIGEcYiBiJGEgYihhJGEgYiRiKGEkYixhKGEkYihiLGEoYjBhLGEoYixiMGEsYjRhMGEsYjBiNGEwYjhhNGEwYjRiOGE0YjxhOGE0YjhiPGE4YkBhPGE4YjxiQGE8YkRhQGE8YkBiRGFAYkhhRGFAYkRiSGFEYkxhSGFEYkhiTGFIYlBhTGFIYkxiUGFMYlRhUGFMYlBiVGFQYlhhVGFQYlRiWGFUYlxhWGFUYlhiXGFYYmBhXGFYYlxiYGFcYmRhYGFcYmBiZGFgYmhhZGFgYmRiaGFkYmxhaGFkYmhibGFoYnBhbGFoYmxicGFsYnRhcGFsYnBidGFwYnhhdGFwYnRieGF0YnxheGF0YnhifGF4YoBhfGF4YnxigGGAYohhhGGAYoRiiGGEYoxhiGGEYohijGGIYpBhjGGIYoxikGGMYpRhkGGMYpBilGGQYphhlGGQYpRimGGUYpxhmGGUYphinGGYYqBhnGGYYpxioGGcYqRhoGGcYqBipGGgYqhhpGGgYqRiqGGkYqxhqGGkYqhirGGoYrBhrGGoYqxisGGsYrRhsGGsYrBitGGwYrhhtGGwYrRiuGG0YrxhuGG0YrhivGG4YsBhvGG4YrxiwGG8YsRhwGG8YsBixGHAYshhxGHAYsRiyGHEYsxhyGHEYshizGHIYtBhzGHIYsxi0GHMYtRh0GHMYtBi1GHQYthh1GHQYtRi2GHUYtxh2GHUYthi3GHYYuBh3GHYYtxi4GHcYuRh4GHcYuBi5GHgYuhh5GHgYuRi6GHkYuxh6GHkYuhi7GHoYvBh7GHoYuxi8GHsYvRh8GHsYvBi9GHwYvhh9GHwYvRi+GH0Yvxh+GH0Yvhi/GH4YwBh/GH4YvxjAGH8YwRiAGH8YwBjBGIAYwhiBGIAYwRjCGIEYwxiCGIEYwhjDGIIYxBiDGIIYwxjEGIMYxRiEGIMYxBjFGIQYxhiFGIQYxRjGGIUYxxiGGIUYxhjHGIYYyBiHGIYYxxjIGIcYyRiIGIcYyBjJGIgYyhiJGIgYyRjKGIkYyxiKGIkYyhjLGIoYzBiLGIoYyxjMGIsYzRiMGIsYzBjNGIwYzhiNGIwYzRjOGI0YzxiOGI0YzhjPGI4Y0BiPGI4YzxjQGI8Y0RiQGI8Y0BjRGJAY0hiRGJAY0RjSGJEY0xiSGJEY0hjTGJIY1BiTGJIY0xjUGJMY1RiUGJMY1BjVGJQY1hiVGJQY1RjWGJUY1xiWGJUY1hjXGJYY2BiXGJYY1xjYGJcY2RiYGJcY2BjZGJgY2hiZGJgY2RjaGJkY2xiaGJkY2hjbGJoY3BibGJoY2xjcGJsY3RicGJsY3BjdGJwY3hidGJwY3RjeGJ0Y3xieGJ0Y3hjfGJ4Y4BifGJ4Y3xjgGJ8Y4RigGJ8Y4BjhGKEY4xiiGKEY4hjjGKIY5BijGKIY4xjkGKMY5RikGKMY5BjlGKQY5hilGKQY5RjmGKUY5ximGKUY5hjnGKYY6BinGKYY5xjoGKcY6RioGKcY6BjpGKgY6hipGKgY6RjqGKkY6xiqGKkY6hjrGKoY7BirGKoY6xjsGKsY7RisGKsY7BjtGKwY7hitGKwY7RjuGK0Y7xiuGK0Y7hjvGK4Y8BivGK4Y7xjwGK8Y8RiwGK8Y8BjxGLAY8hixGLAY8RjyGLEY8xiyGLEY8hjzGLIY9BizGLIY8xj0GLMY9Ri0GLMY9Bj1GLQY9hi1GLQY9Rj2GLUY9xi2GLUY9hj3GLYY+Bi3GLYY9xj4GLcY+Ri4GLcY+Bj5GLgY+hi5GLgY+Rj6GLkY+xi6GLkY+hj7GLoY/Bi7GLoY+xj8GLsY/Ri8GLsY/Bj9GLwY/hi9GLwY/Rj+GL0Y/xi+GL0Y/hj/GL4YABm/GL4Y/xgAGb8YARnAGL8YABkBGcAYAhnBGMAYARkCGcEYAxnCGMEYAhkDGcIYBBnDGMIYAxkEGcMYBRnEGMMYBBkFGcQYBhnFGMQYBRkGGcUYBxnGGMUYBhkHGcYYCBnHGMYYBxkIGccYCRnIGMcYCBkJGcgYChnJGMgYCRkKGckYCxnKGMkYChkLGcoYDBnLGMoYCxkMGcsYDRnMGMsYDBkNGcwYDhnNGMwYDRkOGc0YDxnOGM0YDhkPGc4YEBnPGM4YDxkQGc8YERnQGM8YEBkRGdAYEhnRGNAYERkSGdEYExnSGNEYEhkTGdIYFBnTGNIYExkUGdMYFRnUGNMYFBkVGdQYFhnVGNQYFRkWGdUYFxnWGNUYFhkXGdYYGBnXGNYYFxkYGdcYGRnYGNcYGBkZGdgYGhnZGNgYGRkaGdkYGxnaGNkYGhkbGdoYHBnbGNoYGxkcGdsYHRncGNsYHBkdGdwYHhndGNwYHRkeGd0YHxneGN0YHhkfGd4YIBnfGN4YHxkgGd8YIRngGN8YIBkhGeAYIhnhGOAYIRkiGeIYJBnjGOIYIxkkGeMYJRnkGOMYJBklGeQYJhnlGOQYJRkmGeUYJxnmGOUYJhknGeYYKBnnGOYYJxkoGecYKRnoGOcYKBkpGegYKhnpGOgYKRkqGekYKxnqGOkYKhkrGeoYLBnrGOoYKxksGesYLRnsGOsYLBktGewYLhntGOwYLRkuGe0YLxnuGO0YLhkvGe4YMBnvGO4YLxkwGe8YMRnwGO8YMBkxGfAYMhnxGPAYMRkyGfEYMxnyGPEYMhkzGfIYNBnzGPIYMxk0GfMYNRn0GPMYNBk1GfQYNhn1GPQYNRk2GfUYNxn2GPUYNhk3GfYYOBn3GPYYNxk4GfcYORn4GPcYOBk5GfgYOhn5GPgYORk6GfkYOxn6GPkYOhk7GfoYPBn7GPoYOxk8GfsYPRn8GPsYPBk9GfwYPhn9GPwYPRk+Gf0YPxn+GP0YPhk/Gf4YQBn/GP4YPxlAGf8YQRkAGf8YQBlBGQAZQhkBGQAZQRlCGQEZQxkCGQEZQhlDGQIZRBkDGQIZQxlEGQMZRRkEGQMZRBlFGQQZRhkFGQQZRRlGGQUZRxkGGQUZRhlHGQYZSBkHGQYZRxlIGQcZSRkIGQcZSBlJGQgZShkJGQgZSRlKGQkZSxkKGQkZShlLGQoZTBkLGQoZSxlMGQsZTRkMGQsZTBlNGQwZThkNGQwZTRlOGQ0ZTxkOGQ0ZThlPGQ4ZUBkPGQ4ZTxlQGQ8ZURkQGQ8ZUBlRGRAZUhkRGRAZURlSGREZUxkSGREZUhlTGRIZVBkTGRIZUxlUGRMZVRkUGRMZVBlVGRQZVhkVGRQZVRlWGRUZVxkWGRUZVhlXGRYZWBkXGRYZVxlYGRcZWRkYGRcZWBlZGRgZWhkZGRgZWRlaGRkZWxkaGRkZWhlbGRoZXBkbGRoZWxlcGRsZXRkcGRsZXBldGRwZXhkdGRwZXRleGR0ZXxkeGR0ZXhlfGR4ZYBkfGR4ZXxlgGR8ZYRkgGR8ZYBlhGSAZYhkhGSAZYRliGSEZYxkiGSEZYhljGSMZZRkkGSMZZBllGSQZZhklGSQZZRlmGSUZZxkmGSUZZhlnGSYZaBknGSYZZxloGScZaRkoGScZaBlpGSgZahkpGSgZaRlqGSkZaxkqGSkZahlrGSoZbBkrGSoZaxlsGSsZbRksGSsZbBltGSwZbhktGSwZbRluGS0ZbxkuGS0ZbhlvGS4ZcBkvGS4ZbxlwGS8ZcRkwGS8ZcBlxGTAZchkxGTAZcRlyGTEZcxkyGTEZchlzGTIZdBkzGTIZcxl0GTMZdRk0GTMZdBl1GTQZdhk1GTQZdRl2GTUZdxk2GTUZdhl3GTYZeBk3GTYZdxl4GTcZeRk4GTcZeBl5GTgZehk5GTgZeRl6GTkZexk6GTkZehl7GToZfBk7GToZexl8GTsZfRk8GTsZfBl9GTwZfhk9GTwZfRl+GT0Zfxk+GT0Zfhl/GT4ZgBk/GT4ZfxmAGT8ZgRlAGT8ZgBmBGUAZghlBGUAZgRmCGUEZgxlCGUEZghmDGUIZhBlDGUIZgxmEGUMZhRlEGUMZhBmFGUQZhhlFGUQZhRmGGUUZhxlGGUUZhhmHGUYZiBlHGUYZhxmIGUcZiRlIGUcZiBmJGUgZihlJGUgZiRmKGUkZixlKGUkZihmLGUoZjBlLGUoZixmMGUsZjRlMGUsZjBmNGUwZjhlNGUwZjRmOGU0ZjxlOGU0ZjhmPGU4ZkBlPGU4ZjxmQGU8ZkRlQGU8ZkBmRGVAZkhlRGVAZkRmSGVEZkxlSGVEZkhmTGVIZlBlTGVIZkxmUGVMZlRlUGVMZlBmVGVQZlhlVGVQZlRmWGVUZlxlWGVUZlhmXGVYZmBlXGVYZlxmYGVcZmRlYGVcZmBmZGVgZmhlZGVgZmRmaGVkZmxlaGVkZmhmbGVoZnBlbGVoZmxmcGVsZnRlcGVsZnBmdGVwZnhldGVwZnRmeGV0ZnxleGV0ZnhmfGV4ZoBlfGV4ZnxmgGV8ZoRlgGV8ZoBmhGWAZohlhGWAZoRmiGWEZoxliGWEZohmjGWIZpBljGWIZoxmkGWQZphllGWQZpRmmGWUZpxlmGWUZphmnGWYZqBlnGWYZpxmoGWcZqRloGWcZqBmpGWgZqhlpGWgZqRmqGWkZqxlqGWkZqhmrGWoZrBlrGWoZqxmsGWsZrRlsGWsZrBmtGWwZrhltGWwZrRmuGW0ZrxluGW0ZrhmvGW4ZsBlvGW4ZrxmwGW8ZsRlwGW8ZsBmxGXAZshlxGXAZsRmyGXEZsxlyGXEZshmzGXIZtBlzGXIZsxm0GXMZtRl0GXMZtBm1GXQZthl1GXQZtRm2GXUZtxl2GXUZthm3GXYZuBl3GXYZtxm4GXcZuRl4GXcZuBm5GXgZuhl5GXgZuRm6GXkZuxl6GXkZuhm7GXoZvBl7GXoZuxm8GXsZvRl8GXsZvBm9GXwZvhl9GXwZvRm+GX0Zvxl+GX0Zvhm/GX4ZwBl/GX4ZvxnAGX8ZwRmAGX8ZwBnBGYAZwhmBGYAZwRnCGYEZwxmCGYEZwhnDGYIZxBmDGYIZwxnEGYMZxRmEGYMZxBnFGYQZxhmFGYQZxRnGGYUZxxmGGYUZxhnHGYYZyBmHGYYZxxnIGYcZyRmIGYcZyBnJGYgZyhmJGYgZyRnKGYkZyxmKGYkZyhnLGYoZzBmLGYoZyxnMGYsZzRmMGYsZzBnNGYwZzhmNGYwZzRnOGY0ZzxmOGY0ZzhnPGY4Z0BmPGY4ZzxnQGY8Z0RmQGY8Z0BnRGZAZ0hmRGZAZ0RnSGZEZ0xmSGZEZ0hnTGZIZ1BmTGZIZ0xnUGZMZ1RmUGZMZ1BnVGZQZ1hmVGZQZ1RnWGZUZ1xmWGZUZ1hnXGZYZ2BmXGZYZ1xnYGZcZ2RmYGZcZ2BnZGZgZ2hmZGZgZ2RnaGZkZ2xmaGZkZ2hnbGZoZ3BmbGZoZ2xncGZsZ3RmcGZsZ3BndGZwZ3hmdGZwZ3RneGZ0Z3xmeGZ0Z3hnfGZ4Z4BmfGZ4Z3xngGZ8Z4RmgGZ8Z4BnhGaAZ4hmhGaAZ4RniGaEZ4xmiGaEZ4hnjGaIZ5BmjGaIZ4xnkGaMZ5RmkGaMZ5BnlGaUZ5xmmGaUZ5hnnGaYZ6BmnGaYZ5xnoGacZ6RmoGacZ6BnpGagZ6hmpGagZ6RnqGakZ6xmqGakZ6hnrGaoZ7BmrGaoZ6xnsGasZ7RmsGasZ7BntGawZ7hmtGawZ7RnuGa0Z7xmuGa0Z7hnvGa4Z8BmvGa4Z7xnwGa8Z8RmwGa8Z8BnxGbAZ8hmxGbAZ8RnyGbEZ8xmyGbEZ8hnzGbIZ9BmzGbIZ8xn0GbMZ9Rm0GbMZ9Bn1GbQZ9hm1GbQZ9Rn2GbUZ9xm2GbUZ9hn3GbYZ+Bm3GbYZ9xn4GbcZ+Rm4GbcZ+Bn5GbgZ+hm5GbgZ+Rn6GbkZ+xm6GbkZ+hn7GboZ/Bm7GboZ+xn8GbsZ/Rm8GbsZ/Bn9GbwZ/hm9GbwZ/Rn+Gb0Z/xm+Gb0Z/hn/Gb4ZABq/Gb4Z/xkAGr8ZARrAGb8ZABoBGsAZAhrBGcAZARoCGsEZAxrCGcEZAhoDGsIZBBrDGcIZAxoEGsMZBRrEGcMZBBoFGsQZBhrFGcQZBRoGGsUZBxrGGcUZBhoHGsYZCBrHGcYZBxoIGscZCRrIGccZCBoJGsgZChrJGcgZCRoKGskZCxrKGckZChoLGsoZDBrLGcoZCxoMGssZDRrMGcsZDBoNGswZDhrNGcwZDRoOGs0ZDxrOGc0ZDhoPGs4ZEBrPGc4ZDxoQGs8ZERrQGc8ZEBoRGtAZEhrRGdAZERoSGtEZExrSGdEZEhoTGtIZFBrTGdIZExoUGtMZFRrUGdMZFBoVGtQZFhrVGdQZFRoWGtUZFxrWGdUZFhoXGtYZGBrXGdYZFxoYGtcZGRrYGdcZGBoZGtgZGhrZGdgZGRoaGtkZGxraGdkZGhobGtoZHBrbGdoZGxocGtsZHRrcGdsZHBodGtwZHhrdGdwZHRoeGt0ZHxreGd0ZHhofGt4ZIBrfGd4ZHxogGt8ZIRrgGd8ZIBohGuAZIhrhGeAZIRoiGuEZIxriGeEZIhojGuIZJBrjGeIZIxokGuMZJRrkGeMZJBolGuQZJhrlGeQZJRomGuYZKBrnGeYZJxooGucZKRroGecZKBopGugZKhrpGegZKRoqGukZKxrqGekZKhorGuoZLBrrGeoZKxosGusZLRrsGesZLBotGuwZLhrtGewZLRouGu0ZLxruGe0ZLhovGu4ZMBrvGe4ZLxowGu8ZMRrwGe8ZMBoxGvAZMhrxGfAZMRoyGvEZMxryGfEZMhozGvIZNBrzGfIZMxo0GvMZNRr0GfMZNBo1GvQZNhr1GfQZNRo2GvUZNxr2GfUZNho3GvYZOBr3GfYZNxo4GvcZORr4GfcZOBo5GvgZOhr5GfgZORo6GvkZOxr6GfkZOho7GvoZPBr7GfoZOxo8GvsZPRr8GfsZPBo9GvwZPhr9GfwZPRo+Gv0ZPxr+Gf0ZPho/Gv4ZQBr/Gf4ZPxpAGv8ZQRoAGv8ZQBpBGgAaQhoBGgAaQRpCGgEaQxoCGgEaQhpDGgIaRBoDGgIaQxpEGgMaRRoEGgMaRBpFGgQaRhoFGgQaRRpGGgUaRxoGGgUaRhpHGgYaSBoHGgYaRxpIGgcaSRoIGgcaSBpJGggaShoJGggaSRpKGgkaSxoKGgkaShpLGgoaTBoLGgoaSxpMGgsaTRoMGgsaTBpNGgwaThoNGgwaTRpOGg0aTxoOGg0aThpPGg4aUBoPGg4aTxpQGg8aURoQGg8aUBpRGhAaUhoRGhAaURpSGhEaUxoSGhEaUhpTGhIaVBoTGhIaUxpUGhMaVRoUGhMaVBpVGhQaVhoVGhQaVRpWGhUaVxoWGhUaVhpXGhYaWBoXGhYaVxpYGhcaWRoYGhcaWBpZGhgaWhoZGhgaWRpaGhkaWxoaGhkaWhpbGhoaXBobGhoaWxpcGhsaXRocGhsaXBpdGhwaXhodGhwaXRpeGh0aXxoeGh0aXhpfGh4aYBofGh4aXxpgGh8aYRogGh8aYBphGiAaYhohGiAaYRpiGiEaYxoiGiEaYhpjGiIaZBojGiIaYxpkGiMaZRokGiMaZBplGiQaZholGiQaZRpmGiUaZxomGiUaZhpnGicaaRooGicaaBppGigaahopGigaaRpqGikaaxoqGikaahprGioabBorGioaaxpsGisabRosGisabBptGiwabhotGiwabRpuGi0abxouGi0abhpvGi4acBovGi4abxpwGi8acRowGi8acBpxGjAachoxGjAacRpyGjEacxoyGjEachpzGjIadBozGjIacxp0GjMadRo0GjMadBp1GjQadho1GjQadRp2GjUadxo2GjUadhp3GjYaeBo3GjYadxp4GjcaeRo4GjcaeBp5Gjgaeho5GjgaeRp6Gjkaexo6Gjkaehp7GjoafBo7Gjoaexp8GjsafRo8GjsafBp9Gjwafho9GjwafRp+Gj0afxo+Gj0afhp/Gj4agBo/Gj4afxqAGj8agRpAGj8agBqBGkAaghpBGkAagRqCGkEagxpCGkEaghqDGkIahBpDGkIagxqEGkMahRpEGkMahBqFGkQahhpFGkQahRqGGkUahxpGGkUahhqHGkYaiBpHGkYahxqIGkcaiRpIGkcaiBqJGkgaihpJGkgaiRqKGkkaixpKGkkaihqLGkoajBpLGkoaixqMGksajRpMGksajBqNGkwajhpNGkwajRqOGk0ajxpOGk0ajhqPGk4akBpPGk4ajxqQGk8akRpQGk8akBqRGlAakhpRGlAakRqSGlEakxpSGlEakhqTGlIalBpTGlIakxqUGlMalRpUGlMalBqVGlQalhpVGlQalRqWGlUalxpWGlUalhqXGlYamBpXGlYalxqYGlcamRpYGlcamBqZGlgamhpZGlgamRqaGlkamxpaGlkamhqbGloanBpbGloamxqcGlsanRpcGlsanBqdGlwanhpdGlwanRqeGl0anxpeGl0anhqfGl4aoBpfGl4anxqgGl8aoRpgGl8aoBqhGmAaohphGmAaoRqiGmEaoxpiGmEaohqjGmIapBpjGmIaoxqkGmMapRpkGmMapBqlGmQaphplGmQapRqmGmUapxpmGmUaphqnGmYaqBpnGmYapxqoGmgaqhppGmgaqRqqGmkaqxpqGmkaqhqrGmoarBprGmoaqxqsGmsarRpsGmsarBqtGmwarhptGmwarRquGm0arxpuGm0arhqvGm4asBpvGm4arxqwGm8asRpwGm8asBqxGnAashpxGnAasRqyGnEasxpyGnEashqzGnIatBpzGnIasxq0GnMatRp0GnMatBq1GnQathp1GnQatRq2GnUatxp2GnUathq3GnYauBp3GnYatxq4GncauRp4GncauBq5Gngauhp5GngauRq6Gnkauxp6Gnkauhq7GnoavBp7Gnoauxq8GnsavRp8GnsavBq9Gnwavhp9GnwavRq+Gn0avxp+Gn0avhq/Gn4awBp/Gn4avxrAGn8awRqAGn8awBrBGoAawhqBGoAawRrCGoEawxqCGoEawhrDGoIaxBqDGoIawxrEGoMaxRqEGoMaxBrFGoQaxhqFGoQaxRrGGoUaxxqGGoUaxhrHGoYayBqHGoYaxxrIGocayRqIGocayBrJGogayhqJGogayRrKGokayxqKGokayhrLGooazBqLGooayxrMGosazRqMGosazBrNGowazhqNGowazRrOGo0azxqOGo0azhrPGo4a0BqPGo4azxrQGo8a0RqQGo8a0BrRGpAa0hqRGpAa0RrSGpEa0xqSGpEa0hrTGpIa1BqTGpIa0xrUGpMa1RqUGpMa1BrVGpQa1hqVGpQa1RrWGpUa1xqWGpUa1hrXGpYa2BqXGpYa1xrYGpca2RqYGpca2BrZGpga2hqZGpga2RraGpka2xqaGpka2hrbGpoa3BqbGpoa2xrcGpsa3RqcGpsa3BrdGpwa3hqdGpwa3RreGp0a3xqeGp0a3hrfGp4a4BqfGp4a3xrgGp8a4RqgGp8a4BrhGqAa4hqhGqAa4RriGqEa4xqiGqEa4hrjGqIa5BqjGqIa4xrkGqMa5RqkGqMa5BrlGqQa5hqlGqQa5RrmGqUa5xqmGqUa5hrnGqYa6BqnGqYa5xroGqca6RqoGqca6BrpGqka6xqqGqka6hrrGqoa7BqrGqoa6xrsGqsa7RqsGqsa7BrtGqwa7hqtGqwa7RruGq0a7xquGq0a7hrvGq4a8BqvGq4a7xrwGq8a8RqwGq8a8BrxGrAa8hqxGrAa8RryGrEa8xqyGrEa8hrzGrIa9BqzGrIa8xr0GrMa9Rq0GrMa9Br1GrQa9hq1GrQa9Rr2GrUa9xq2GrUa9hr3GrYa+Bq3GrYa9xr4Grca+Rq4Grca+Br5Grga+hq5Grga+Rr6Grka+xq6Grka+hr7Groa/Bq7Groa+xr8Grsa/Rq8Grsa/Br9Grwa/hq9Grwa/Rr+Gr0a/xq+Gr0a/hr/Gr4aABu/Gr4a/xoAG78aARvAGr8aABsBG8AaAhvBGsAaARsCG8EaAxvCGsEaAhsDG8IaBBvDGsIaAxsEG8MaBRvEGsMaBBsFG8QaBhvFGsQaBRsGG8UaBxvGGsUaBhsHG8YaCBvHGsYaBxsIG8caCRvIGscaCBsJG8gaChvJGsgaCRsKG8kaCxvKGskaChsLG8oaDBvLGsoaCxsMG8saDRvMGssaDBsNG8waDhvNGswaDRsOG80aDxvOGs0aDhsPG84aEBvPGs4aDxsQG88aERvQGs8aEBsRG9AaEhvRGtAaERsSG9EaExvSGtEaEhsTG9IaFBvTGtIaExsUG9MaFRvUGtMaFBsVG9QaFhvVGtQaFRsWG9UaFxvWGtUaFhsXG9YaGBvXGtYaFxsYG9caGRvYGtcaGBsZG9gaGhvZGtgaGRsaG9kaGxvaGtkaGhsbG9oaHBvbGtoaGxscG9saHRvcGtsaHBsdG9waHhvdGtwaHRseG90aHxveGt0aHhsfG94aIBvfGt4aHxsgG98aIRvgGt8aIBshG+AaIhvhGuAaIRsiG+EaIxviGuEaIhsjG+IaJBvjGuIaIxskG+MaJRvkGuMaJBslG+QaJhvlGuQaJRsmG+UaJxvmGuUaJhsnG+YaKBvnGuYaJxsoG+caKRvoGucaKBspG+gaKhvpGugaKRsqG+oaLBvrGuoaKxssG+saLRvsGusaLBstG+waLhvtGuwaLRsuG+0aLxvuGu0aLhsvG+4aMBvvGu4aLxswG+8aMRvwGu8aMBsxG/AaMhvxGvAaMRsyG/EaMxvyGvEaMhszG/IaNBvzGvIaMxs0G/MaNRv0GvMaNBs1G/QaNhv1GvQaNRs2G/UaNxv2GvUaNhs3G/YaOBv3GvYaNxs4G/caORv4GvcaOBs5G/gaOhv5GvgaORs6G/kaOxv6GvkaOhs7G/oaPBv7GvoaOxs8G/saPRv8GvsaPBs9G/waPhv9GvwaPRs+G/0aPxv+Gv0aPhs/G/4aQBv/Gv4aPxtAG/8aQRsAG/8aQBtBGwAbQhsBGwAbQRtCGwEbQxsCGwEbQhtDGwIbRBsDGwIbQxtEGwMbRRsEGwMbRBtFGwQbRhsFGwQbRRtGGwUbRxsGGwUbRhtHGwYbSBsHGwYbRxtIGwcbSRsIGwcbSBtJGwgbShsJGwgbSRtKGwkbSxsKGwkbShtLGwobTBsLGwobSxtMGwsbTRsMGwsbTBtNGwwbThsNGwwbTRtOGw0bTxsOGw0bThtPGw4bUBsPGw4bTxtQGw8bURsQGw8bUBtRGxAbUhsRGxAbURtSGxEbUxsSGxEbUhtTGxIbVBsTGxIbUxtUGxMbVRsUGxMbVBtVGxQbVhsVGxQbVRtWGxUbVxsWGxUbVhtXGxYbWBsXGxYbVxtYGxcbWRsYGxcbWBtZGxgbWhsZGxgbWRtaGxkbWxsaGxkbWhtbGxobXBsbGxobWxtcGxsbXRscGxsbXBtdGxwbXhsdGxwbXRteGx0bXxseGx0bXhtfGx4bYBsfGx4bXxtgGx8bYRsgGx8bYBthGyAbYhshGyAbYRtiGyEbYxsiGyEbYhtjGyIbZBsjGyIbYxtkGyMbZRskGyMbZBtlGyQbZhslGyQbZRtmGyUbZxsmGyUbZhtnGyYbaBsnGyYbZxtoGycbaRsoGycbaBtpGygbahspGygbaRtqGykbaxsqGykbahtrGysbbRssGysbbBttGywbbhstGywbbRtuGy0bbxsuGy0bbhtvGy4bcBsvGy4bbxtwGy8bcRswGy8bcBtxGzAbchsxGzAbcRtyGzEbcxsyGzEbchtzGzIbdBszGzIbcxt0GzMbdRs0GzMbdBt1GzQbdhs1GzQbdRt2GzUbdxs2GzUbdht3GzYbeBs3GzYbdxt4GzcbeRs4GzcbeBt5Gzgbehs5GzgbeRt6Gzkbexs6Gzkbeht7GzobfBs7Gzobext8GzsbfRs8GzsbfBt9Gzwbfhs9GzwbfRt+Gz0bfxs+Gz0bfht/Gz4bgBs/Gz4bfxuAGz8bgRtAGz8bgBuBG0AbghtBG0AbgRuCG0EbgxtCG0EbghuDG0IbhBtDG0IbgxuEG0MbhRtEG0MbhBuFG0QbhhtFG0QbhRuGG0UbhxtGG0UbhhuHG0YbiBtHG0YbhxuIG0cbiRtIG0cbiBuJG0gbihtJG0gbiRuKG0kbixtKG0kbihuLG0objBtLG0obixuMG0sbjRtMG0sbjBuNG0wbjhtNG0wbjRuOG00bjxtOG00bjhuPG04bkBtPG04bjxuQG08bkRtQG08bkBuRG1AbkhtRG1AbkRuSG1EbkxtSG1EbkhuTG1IblBtTG1IbkxuUG1MblRtUG1MblBuVG1QblhtVG1QblRuWG1UblxtWG1UblhuXG1YbmBtXG1YblxuYG1cbmRtYG1cbmBuZG1gbmhtZG1gbmRuaG1kbmxtaG1kbmhubG1obnBtbG1obmxucG1sbnRtcG1sbnBudG1wbnhtdG1wbnRueG10bnxteG10bnhufG14boBtfG14bnxugG18boRtgG18boBuhG2AbohthG2AboRuiG2EboxtiG2EbohujG2IbpBtjG2IboxukG2MbpRtkG2MbpBulG2QbphtlG2QbpRumG2UbpxtmG2UbphunG2YbqBtnG2YbpxuoG2cbqRtoG2cbqBupG2gbqhtpG2gbqRuqG2kbqxtqG2kbqhurG2obrBtrG2obqxusG2wbrhttG2wbrRuuG20brxtuG20brhuvG24bsBtvG24brxuwG28bsRtwG28bsBuxG3AbshtxG3AbsRuyG3EbsxtyG3EbshuzG3IbtBtzG3Ibsxu0G3MbtRt0G3MbtBu1G3Qbtht1G3QbtRu2G3Ubtxt2G3Ubthu3G3YbuBt3G3Ybtxu4G3cbuRt4G3cbuBu5G3gbuht5G3gbuRu6G3kbuxt6G3kbuhu7G3obvBt7G3obuxu8G3sbvRt8G3sbvBu9G3wbvht9G3wbvRu+G30bvxt+G30bvhu/G34bwBt/G34bvxvAG38bwRuAG38bwBvBG4AbwhuBG4AbwRvCG4EbwxuCG4EbwhvDG4IbxBuDG4IbwxvEG4MbxRuEG4MbxBvFG4QbxhuFG4QbxRvGG4UbxxuGG4UbxhvHG4YbyBuHG4YbxxvIG4cbyRuIG4cbyBvJG4gbyhuJG4gbyRvKG4kbyxuKG4kbyhvLG4obzBuLG4obyxvMG4sbzRuMG4sbzBvNG4wbzhuNG4wbzRvOG40bzxuOG40bzhvPG44b0BuPG44bzxvQG48b0RuQG48b0BvRG5Ab0huRG5Ab0RvSG5Eb0xuSG5Eb0hvTG5Ib1BuTG5Ib0xvUG5Mb1RuUG5Mb1BvVG5Qb1huVG5Qb1RvWG5Ub1xuWG5Ub1hvXG5Yb2BuXG5Yb1xvYG5cb2RuYG5cb2BvZG5gb2huZG5gb2RvaG5kb2xuaG5kb2hvbG5ob3BubG5ob2xvcG5sb3RucG5sb3BvdG5wb3hudG5wb3RveG50b3xueG50b3hvfG54b4BufG54b3xvgG58b4RugG58b4BvhG6Ab4huhG6Ab4RviG6Eb4xuiG6Eb4hvjG6Ib5BujG6Ib4xvkG6Mb5RukG6Mb5BvlG6Qb5hulG6Qb5RvmG6Ub5xumG6Ub5hvnG6Yb6BunG6Yb5xvoG6cb6RuoG6cb6BvpG6gb6hupG6gb6RvqG6kb6xuqG6kb6hvrG6ob7BurG6ob6xvsG6sb7RusG6sb7BvtG60b7xuuG60b7hvvG64b8BuvG64b7xvwG68b8RuwG68b8BvxG7Ab8huxG7Ab8RvyG7Eb8xuyG7Eb8hvzG7Ib9BuzG7Ib8xv0G7Mb9Ru0G7Mb9Bv1G7Qb9hu1G7Qb9Rv2G7Ub9xu2G7Ub9hv3G7Yb+Bu3G7Yb9xv4G7cb+Ru4G7cb+Bv5G7gb+hu5G7gb+Rv6G7kb+xu6G7kb+hv7G7ob/Bu7G7ob+xv8G7sb/Ru8G7sb/Bv9G7wb/hu9G7wb/Rv+G70b/xu+G70b/hv/G74bABy/G74b/xsAHL8bARzAG78bABwBHMAbAhzBG8AbARwCHMEbAxzCG8EbAhwDHMIbBBzDG8IbAxwEHMMbBRzEG8MbBBwFHMQbBhzFG8QbBRwGHMUbBxzGG8UbBhwHHMYbCBzHG8YbBxwIHMcbCRzIG8cbCBwJHMgbChzJG8gbCRwKHMkbCxzKG8kbChwLHMobDBzLG8obCxwMHMsbDRzMG8sbDBwNHMwbDhzNG8wbDRwOHM0bDxzOG80bDhwPHM4bEBzPG84bDxwQHM8bERzQG88bEBwRHNAbEhzRG9AbERwSHNEbExzSG9EbEhwTHNIbFBzTG9IbExwUHNMbFRzUG9MbFBwVHNQbFhzVG9QbFRwWHNUbFxzWG9UbFhwXHNYbGBzXG9YbFxwYHNcbGRzYG9cbGBwZHNgbGhzZG9gbGRwaHNkbGxzaG9kbGhwbHNobHBzbG9obGxwcHNsbHRzcG9sbHBwdHNwbHhzdG9wbHRweHN0bHxzeG90bHhwfHN4bIBzfG94bHxwgHN8bIRzgG98bIBwhHOAbIhzhG+AbIRwiHOEbIxziG+EbIhwjHOIbJBzjG+IbIxwkHOMbJRzkG+MbJBwlHOQbJhzlG+QbJRwmHOUbJxzmG+UbJhwnHOYbKBznG+YbJxwoHOcbKRzoG+cbKBwpHOgbKhzpG+gbKRwqHOkbKxzqG+kbKhwrHOobLBzrG+obKxwsHOsbLRzsG+sbLBwtHOwbLhztG+wbLRwuHO4bMBzvG+4bLxwwHO8bMRzwG+8bMBwxHPAbMhzxG/AbMRwyHPEbMxzyG/EbMhwzHPIbNBzzG/IbMxw0HPMbNRz0G/MbNBw1HPQbNhz1G/QbNRw2HPUbNxz2G/UbNhw3HPYbOBz3G/YbNxw4HPcbORz4G/cbOBw5HPgbOhz5G/gbORw6HPkbOxz6G/kbOhw7HPobPBz7G/obOxw8HPsbPRz8G/sbPBw9HPwbPhz9G/wbPRw+HP0bPxz+G/0bPhw/HP4bQBz/G/4bPxxAHP8bQRwAHP8bQBxBHAAcQhwBHAAcQRxCHAEcQxwCHAEcQhxDHAIcRBwDHAIcQxxEHAMcRRwEHAMcRBxFHAQcRhwFHAQcRRxGHAUcRxwGHAUcRhxHHAYcSBwHHAYcRxxIHAccSRwIHAccSBxJHAgcShwJHAgcSRxKHAkcSxwKHAkcShxLHAocTBwLHAocSxxMHAscTRwMHAscTBxNHAwcThwNHAwcTRxOHA0cTxwOHA0cThxPHA4cUBwPHA4cTxxQHA8cURwQHA8cUBxRHBAcUhwRHBAcURxSHBEcUxwSHBEcUhxTHBIcVBwTHBIcUxxUHBMcVRwUHBMcVBxVHBQcVhwVHBQcVRxWHBUcVxwWHBUcVhxXHBYcWBwXHBYcVxxYHBccWRwYHBccWBxZHBgcWhwZHBgcWRxaHBkcWxwaHBkcWhxbHBocXBwbHBocWxxcHBscXRwcHBscXBxdHBwcXhwdHBwcXRxeHB0cXxweHB0cXhxfHB4cYBwfHB4cXxxgHB8cYRwgHB8cYBxhHCAcYhwhHCAcYRxiHCEcYxwiHCEcYhxjHCIcZBwjHCIcYxxkHCMcZRwkHCMcZBxlHCQcZhwlHCQcZRxmHCUcZxwmHCUcZhxnHCYcaBwnHCYcZxxoHCccaRwoHCccaBxpHCgcahwpHCgcaRxqHCkcaxwqHCkcahxrHCocbBwrHCocaxxsHCscbRwsHCscbBxtHCwcbhwtHCwcbRxuHC0cbxwuHC0cbhxvHC8ccRwwHC8ccBxxHDAcchwxHDAccRxyHDEccxwyHDEcchxzHDIcdBwzHDIccxx0HDMcdRw0HDMcdBx1HDQcdhw1HDQcdRx2HDUcdxw2HDUcdhx3HDYceBw3HDYcdxx4HDcceRw4HDcceBx5HDgcehw5HDgceRx6HDkcexw6HDkcehx7HDocfBw7HDocexx8HDscfRw8HDscfBx9HDwcfhw9HDwcfRx+HD0cfxw+HD0cfhx/HD4cgBw/HD4cfxyAHD8cgRxAHD8cgByBHEAcghxBHEAcgRyCHEEcgxxCHEEcghyDHEIchBxDHEIcgxyEHEMchRxEHEMchByFHEQchhxFHEQchRyGHEUchxxGHEUchhyHHEYciBxHHEYchxyIHEcciRxIHEcciByJHEgcihxJHEgciRyKHEkcixxKHEkcihyLHEocjBxLHEocixyMHEscjRxMHEscjByNHEwcjhxNHEwcjRyOHE0cjxxOHE0cjhyPHE4ckBxPHE4cjxyQHE8ckRxQHE8ckByRHFAckhxRHFAckRySHFEckxxSHFEckhyTHFIclBxTHFIckxyUHFMclRxUHFMclByVHFQclhxVHFQclRyWHFUclxxWHFUclhyXHFYcmBxXHFYclxyYHFccmRxYHFccmByZHFgcmhxZHFgcmRyaHFkcmxxaHFkcmhybHFocnBxbHFocmxycHFscnRxcHFscnBydHFwcnhxdHFwcnRyeHF0cnxxeHF0cnhyfHF4coBxfHF4cnxygHF8coRxgHF8coByhHGAcohxhHGAcoRyiHGEcoxxiHGEcohyjHGIcpBxjHGIcoxykHGMcpRxkHGMcpBylHGQcphxlHGQcpRymHGUcpxxmHGUcphynHGYcqBxnHGYcpxyoHGccqRxoHGccqBypHGgcqhxpHGgcqRyqHGkcqxxqHGkcqhyrHGocrBxrHGocqxysHGscrRxsHGscrBytHGwcrhxtHGwcrRyuHG0crxxuHG0crhyvHG4csBxvHG4crxywHHAcshxxHHAcsRyyHHEcsxxyHHEcshyzHHIctBxzHHIcsxy0HHMctRx0HHMctBy1HHQcthx1HHQctRy2HHUctxx2HHUcthy3HHYcuBx3HHYctxy4HHccuRx4HHccuBy5HHgcuhx5HHgcuRy6HHkcuxx6HHkcuhy7HHocvBx7HHocuxy8HHscvRx8HHscvBy9HHwcvhx9HHwcvRy+HH0cvxx+HH0cvhy/HH4cwBx/HH4cvxzAHH8cwRyAHH8cwBzBHIAcwhyBHIAcwRzCHIEcwxyCHIEcwhzDHIIcxByDHIIcwxzEHIMcxRyEHIMcxBzFHIQcxhyFHIQcxRzGHIUcxxyGHIUcxhzHHIYcyByHHIYcxxzIHIccyRyIHIccyBzJHIgcyhyJHIgcyRzKHIkcyxyKHIkcyhzLHIoczByLHIocyxzMHIsczRyMHIsczBzNHIwczhyNHIwczRzOHI0czxyOHI0czhzPHI4c0ByPHI4czxzQHI8c0RyQHI8c0BzRHJAc0hyRHJAc0RzSHJEc0xySHJEc0hzTHJIc1ByTHJIc0xzUHJMc1RyUHJMc1BzVHJQc1hyVHJQc1RzWHJUc1xyWHJUc1hzXHJYc2ByXHJYc1xzYHJcc2RyYHJcc2BzZHJgc2hyZHJgc2RzaHJkc2xyaHJkc2hzbHJoc3BybHJoc2xzcHJsc3RycHJsc3BzdHJwc3hydHJwc3RzeHJ0c3xyeHJ0c3hzfHJ4c4ByfHJ4c3xzgHJ8c4RygHJ8c4BzhHKAc4hyhHKAc4RziHKEc4xyiHKEc4hzjHKIc5ByjHKIc4xzkHKMc5RykHKMc5BzlHKQc5hylHKQc5RzmHKUc5xymHKUc5hznHKYc6BynHKYc5xzoHKcc6RyoHKcc6BzpHKgc6hypHKgc6RzqHKkc6xyqHKkc6hzrHKoc7ByrHKoc6xzsHKsc7RysHKsc7BztHKwc7hytHKwc7RzuHK0c7xyuHK0c7hzvHK4c8ByvHK4c7xzwHK8c8RywHK8c8BzxHLEc8xyyHLEc8hzzHLIc9ByzHLIc8xz0HLMc9Ry0HLMc9Bz1HLQc9hy1HLQc9Rz2HLUc9xy2HLUc9hz3HLYc+By3HLYc9xz4HLcc+Ry4HLcc+Bz5HLgc+hy5HLgc+Rz6HLkc+xy6HLkc+hz7HLoc/By7HLoc+xz8HLsc/Ry8HLsc/Bz9HLwc/hy9HLwc/Rz+HL0c/xy+HL0c/hz/HL4cAB2/HL4c/xwAHb8cAR3AHL8cAB0BHcAcAh3BHMAcAR0CHcEcAx3CHMEcAh0DHcIcBB3DHMIcAx0EHcMcBR3EHMMcBB0FHcQcBh3FHMQcBR0GHcUcBx3GHMUcBh0HHcYcCB3HHMYcBx0IHcccCR3IHMccCB0JHcgcCh3JHMgcCR0KHckcCx3KHMkcCh0LHcocDB3LHMocCx0MHcscDR3MHMscDB0NHcwcDh3NHMwcDR0OHc0cDx3OHM0cDh0PHc4cEB3PHM4cDx0QHc8cER3QHM8cEB0RHdAcEh3RHNAcER0SHdEcEx3SHNEcEh0THdIcFB3THNIcEx0UHdMcFR3UHNMcFB0VHdQcFh3VHNQcFR0WHdUcFx3WHNUcFh0XHdYcGB3XHNYcFx0YHdccGR3YHNccGB0ZHdgcGh3ZHNgcGR0aHdkcGx3aHNkcGh0bHdocHB3bHNocGx0cHdscHR3cHNscHB0dHdwcHh3dHNwcHR0eHd0cHx3eHN0cHh0fHd4cIB3fHN4cHx0gHd8cIR3gHN8cIB0hHeAcIh3hHOAcIR0iHeEcIx3iHOEcIh0jHeIcJB3jHOIcIx0kHeMcJR3kHOMcJB0lHeQcJh3lHOQcJR0mHeUcJx3mHOUcJh0nHeYcKB3nHOYcJx0oHeccKR3oHOccKB0pHegcKh3pHOgcKR0qHekcKx3qHOkcKh0rHeocLB3rHOocKx0sHescLR3sHOscLB0tHewcLh3tHOwcLR0uHe0cLx3uHO0cLh0vHe4cMB3vHO4cLx0wHe8cMR3wHO8cMB0xHfAcMh3xHPAcMR0yHfIcNB3zHPIcMx00HfMcNR30HPMcNB01HfQcNh31HPQcNR02HfUcNx32HPUcNh03HfYcOB33HPYcNx04HfccOR34HPccOB05HfgcOh35HPgcOR06HfkcOx36HPkcOh07HfocPB37HPocOx08HfscPR38HPscPB09HfwcPh39HPwcPR0+Hf0cPx3+HP0cPh0/Hf4cQB3/HP4cPx1AHf8cQR0AHf8cQB1BHQAdQh0BHQAdQR1CHQEdQx0CHQEdQh1DHQIdRB0DHQIdQx1EHQMdRR0EHQMdRB1FHQQdRh0FHQQdRR1GHQUdRx0GHQUdRh1HHQYdSB0HHQYdRx1IHQcdSR0IHQcdSB1JHQgdSh0JHQgdSR1KHQkdSx0KHQkdSh1LHQodTB0LHQodSx1MHQsdTR0MHQsdTB1NHQwdTh0NHQwdTR1OHQ0dTx0OHQ0dTh1PHQ4dUB0PHQ4dTx1QHQ8dUR0QHQ8dUB1RHRAdUh0RHRAdUR1SHREdUx0SHREdUh1THRIdVB0THRIdUx1UHRMdVR0UHRMdVB1VHRQdVh0VHRQdVR1WHRUdVx0WHRUdVh1XHRYdWB0XHRYdVx1YHRcdWR0YHRcdWB1ZHRgdWh0ZHRgdWR1aHRkdWx0aHRkdWh1bHRodXB0bHRodWx1cHRsdXR0cHRsdXB1dHRwdXh0dHRwdXR1eHR0dXx0eHR0dXh1fHR4dYB0fHR4dXx1gHR8dYR0gHR8dYB1hHSAdYh0hHSAdYR1iHSEdYx0iHSEdYh1jHSIdZB0jHSIdYx1kHSMdZR0kHSMdZB1lHSQdZh0lHSQdZR1mHSUdZx0mHSUdZh1nHSYdaB0nHSYdZx1oHScdaR0oHScdaB1pHSgdah0pHSgdaR1qHSkdax0qHSkdah1rHSodbB0rHSodax1sHSsdbR0sHSsdbB1tHSwdbh0tHSwdbR1uHS0dbx0uHS0dbh1vHS4dcB0vHS4dbx1wHS8dcR0wHS8dcB1xHTAdch0xHTAdcR1yHTEdcx0yHTEdch1zHTMddR00HTMddB11HTQddh01HTQddR12HTUddx02HTUddh13HTYdeB03HTYddx14HTcdeR04HTcdeB15HTgdeh05HTgdeR16HTkdex06HTkdeh17HTodfB07HTodex18HTsdfR08HTsdfB19HTwdfh09HTwdfR1+HT0dfx0+HT0dfh1/HT4dgB0/HT4dfx2AHT8dgR1AHT8dgB2BHUAdgh1BHUAdgR2CHUEdgx1CHUEdgh2DHUIdhB1DHUIdgx2EHUMdhR1EHUMdhB2FHUQdhh1FHUQdhR2GHUUdhx1GHUUdhh2HHUYdiB1HHUYdhx2IHUcdiR1IHUcdiB2JHUgdih1JHUgdiR2KHUkdix1KHUkdih2LHUodjB1LHUodix2MHUsdjR1MHUsdjB2NHUwdjh1NHUwdjR2OHU0djx1OHU0djh2PHU4dkB1PHU4djx2QHU8dkR1QHU8dkB2RHVAdkh1RHVAdkR2SHVEdkx1SHVEdkh2THVIdlB1THVIdkx2UHVMdlR1UHVMdlB2VHVQdlh1VHVQdlR2WHVUdlx1WHVUdlh2XHVYdmB1XHVYdlx2YHVcdmR1YHVcdmB2ZHVgdmh1ZHVgdmR2aHVkdmx1aHVkdmh2bHVodnB1bHVodmx2cHVsdnR1cHVsdnB2dHVwdnh1dHVwdnR2eHV0dnx1eHV0dnh2fHV4doB1fHV4dnx2gHV8doR1gHV8doB2hHWAdoh1hHWAdoR2iHWEdox1iHWEdoh2jHWIdpB1jHWIdox2kHWMdpR1kHWMdpB2lHWQdph1lHWQdpR2mHWUdpx1mHWUdph2nHWYdqB1nHWYdpx2oHWcdqR1oHWcdqB2pHWgdqh1pHWgdqR2qHWkdqx1qHWkdqh2rHWodrB1rHWodqx2sHWsdrR1sHWsdrB2tHWwdrh1tHWwdrR2uHW0drx1uHW0drh2vHW4dsB1vHW4drx2wHW8dsR1wHW8dsB2xHXAdsh1xHXAdsR2yHXEdsx1yHXEdsh2zHXIdtB1zHXIdsx20HXQdth11HXQdtR22HXUdtx12HXUdth23HXYduB13HXYdtx24HXcduR14HXcduB25HXgduh15HXgduR26HXkdux16HXkduh27HXodvB17HXodux28HXsdvR18HXsdvB29HXwdvh19HXwdvR2+HX0dvx1+HX0dvh2/HX4dwB1/HX4dvx3AHX8dwR2AHX8dwB3BHYAdwh2BHYAdwR3CHYEdwx2CHYEdwh3DHYIdxB2DHYIdwx3EHYMdxR2EHYMdxB3FHYQdxh2FHYQdxR3GHYUdxx2GHYUdxh3HHYYdyB2HHYYdxx3IHYcdyR2IHYcdyB3JHYgdyh2JHYgdyR3KHYkdyx2KHYkdyh3LHYodzB2LHYodyx3MHYsdzR2MHYsdzB3NHYwdzh2NHYwdzR3OHY0dzx2OHY0dzh3PHY4d0B2PHY4dzx3QHY8d0R2QHY8d0B3RHZAd0h2RHZAd0R3SHZEd0x2SHZEd0h3THZId1B2THZId0x3UHZMd1R2UHZMd1B3VHZQd1h2VHZQd1R3WHZUd1x2WHZUd1h3XHZYd2B2XHZYd1x3YHZcd2R2YHZcd2B3ZHZgd2h2ZHZgd2R3aHZkd2x2aHZkd2h3bHZod3B2bHZod2x3cHZsd3R2cHZsd3B3dHZwd3h2dHZwd3R3eHZ0d3x2eHZ0d3h3fHZ4d4B2fHZ4d3x3gHZ8d4R2gHZ8d4B3hHaAd4h2hHaAd4R3iHaEd4x2iHaEd4h3jHaId5B2jHaId4x3kHaMd5R2kHaMd5B3lHaQd5h2lHaQd5R3mHaUd5x2mHaUd5h3nHaYd6B2nHaYd5x3oHacd6R2oHacd6B3pHagd6h2pHagd6R3qHakd6x2qHakd6h3rHaod7B2rHaod6x3sHasd7R2sHasd7B3tHawd7h2tHawd7R3uHa0d7x2uHa0d7h3vHa4d8B2vHa4d7x3wHa8d8R2wHa8d8B3xHbAd8h2xHbAd8R3yHbEd8x2yHbEd8h3zHbId9B2zHbId8x30HbMd9R20HbMd9B31HbUd9x22HbUd9h33HbYd+B23HbYd9x34Hbcd+R24Hbcd+B35Hbgd+h25Hbgd+R36Hbkd+x26Hbkd+h37Hbod/B27Hbod+x38Hbsd/R28Hbsd/B39Hbwd/h29Hbwd/R3+Hb0d/x2+Hb0d/h3/Hb4dAB6/Hb4d/x0AHr8dAR7AHb8dAB4BHsAdAh7BHcAdAR4CHsEdAx7CHcEdAh4DHsIdBB7DHcIdAx4EHsMdBR7EHcMdBB4FHsQdBh7FHcQdBR4GHsUdBx7GHcUdBh4HHsYdCB7HHcYdBx4IHscdCR7IHccdCB4JHsgdCh7JHcgdCR4KHskdCx7KHckdCh4LHsodDB7LHcodCx4MHssdDR7MHcsdDB4NHswdDh7NHcwdDR4OHs0dDx7OHc0dDh4PHs4dEB7PHc4dDx4QHs8dER7QHc8dEB4RHtAdEh7RHdAdER4SHtEdEx7SHdEdEh4THtIdFB7THdIdEx4UHtMdFR7UHdMdFB4VHtQdFh7VHdQdFR4WHtUdFx7WHdUdFh4XHtYdGB7XHdYdFx4YHtcdGR7YHdcdGB4ZHtgdGh7ZHdgdGR4aHtkdGx7aHdkdGh4bHtodHB7bHdodGx4cHtsdHR7cHdsdHB4dHtwdHh7dHdwdHR4eHt0dHx7eHd0dHh4fHt4dIB7fHd4dHx4gHt8dIR7gHd8dIB4hHuAdIh7hHeAdIR4iHuEdIx7iHeEdIh4jHuIdJB7jHeIdIx4kHuMdJR7kHeMdJB4lHuQdJh7lHeQdJR4mHuUdJx7mHeUdJh4nHuYdKB7nHeYdJx4oHucdKR7oHecdKB4pHugdKh7pHegdKR4qHukdKx7qHekdKh4rHuodLB7rHeodKx4sHusdLR7sHesdLB4tHuwdLh7tHewdLR4uHu0dLx7uHe0dLh4vHu4dMB7vHe4dLx4wHu8dMR7wHe8dMB4xHvAdMh7xHfAdMR4yHvEdMx7yHfEdMh4zHvIdNB7zHfIdMx40HvMdNR70HfMdNB41HvQdNh71HfQdNR42HvYdOB73HfYdNx44HvcdOR74HfcdOB45HvgdOh75HfgdOR46HvkdOx76HfkdOh47HvodPB77HfodOx48HvsdPR78HfsdPB49HvwdPh79HfwdPR4+Hv0dPx7+Hf0dPh4/Hv4dQB7/Hf4dPx5AHv8dQR4AHv8dQB5BHgAeQh4BHgAeQR5CHgEeQx4CHgEeQh5DHgIeRB4DHgIeQx5EHgMeRR4EHgMeRB5FHgQeRh4FHgQeRR5GHgUeRx4GHgUeRh5HHgYeSB4HHgYeRx5IHgceSR4IHgceSB5JHggeSh4JHggeSR5KHgkeSx4KHgkeSh5LHgoeTB4LHgoeSx5MHgseTR4MHgseTB5NHgweTh4NHgweTR5OHg0eTx4OHg0eTh5PHg4eUB4PHg4eTx5QHg8eUR4QHg8eUB5RHhAeUh4RHhAeUR5SHhEeUx4SHhEeUh5THhIeVB4THhIeUx5UHhMeVR4UHhMeVB5VHhQeVh4VHhQeVR5WHhUeVx4WHhUeVh5XHhYeWB4XHhYeVx5YHhceWR4YHhceWB5ZHhgeWh4ZHhgeWR5aHhkeWx4aHhkeWh5bHhoeXB4bHhoeWx5cHhseXR4cHhseXB5dHhweXh4dHhweXR5eHh0eXx4eHh0eXh5fHh4eYB4fHh4eXx5gHh8eYR4gHh8eYB5hHiAeYh4hHiAeYR5iHiEeYx4iHiEeYh5jHiIeZB4jHiIeYx5kHiMeZR4kHiMeZB5lHiQeZh4lHiQeZR5mHiUeZx4mHiUeZh5nHiYeaB4nHiYeZx5oHiceaR4oHiceaB5pHigeah4pHigeaR5qHikeax4qHikeah5rHioebB4rHioeax5sHisebR4sHisebB5tHiwebh4tHiwebR5uHi0ebx4uHi0ebh5vHi4ecB4vHi4ebx5wHi8ecR4wHi8ecB5xHjAech4xHjAecR5yHjEecx4yHjEech5zHjIedB4zHjIecx50HjMedR40HjMedB51HjQedh41HjQedR52HjUedx42HjUedh53HjceeR44HjceeB55Hjgeeh45HjgeeR56Hjkeex46Hjkeeh57HjoefB47Hjoeex58HjsefR48HjsefB59Hjwefh49HjwefR5+Hj0efx4+Hj0efh5/Hj4egB4/Hj4efx6AHj8egR5AHj8egB6BHkAegh5BHkAegR6CHkEegx5CHkEegh6DHkIehB5DHkIegx6EHkMehR5EHkMehB6FHkQehh5FHkQehR6GHkUehx5GHkUehh6HHkYeiB5HHkYehx6IHkceiR5IHkceiB6JHkgeih5JHkgeiR6KHkkeix5KHkkeih6LHkoejB5LHkoeix6MHksejR5MHksejB6NHkwejh5NHkwejR6OHk0ejx5OHk0ejh6PHk4ekB5PHk4ejx6QHk8ekR5QHk8ekB6RHlAekh5RHlAekR6SHlEekx5SHlEekh6THlIelB5THlIekx6UHlMelR5UHlMelB6VHlQelh5VHlQelR6WHlUelx5WHlUelh6XHlYemB5XHlYelx6YHlcemR5YHlcemB6ZHlgemh5ZHlgemR6aHlkemx5aHlkemh6bHloenB5bHloemx6cHlsenR5cHlsenB6dHlwenh5dHlwenR6eHl0enx5eHl0enh6fHl4eoB5fHl4enx6gHl8eoR5gHl8eoB6hHmAeoh5hHmAeoR6iHmEeox5iHmEeoh6jHmIepB5jHmIeox6kHmMepR5kHmMepB6lHmQeph5lHmQepR6mHmUepx5mHmUeph6nHmYeqB5nHmYepx6oHmceqR5oHmceqB6pHmgeqh5pHmgeqR6qHmkeqx5qHmkeqh6rHmoerB5rHmoeqx6sHmserR5sHmserB6tHmwerh5tHmwerR6uHm0erx5uHm0erh6vHm4esB5vHm4erx6wHm8esR5wHm8esB6xHnAesh5xHnAesR6yHnEesx5yHnEesh6zHnIetB5zHnIesx60HnMetR50HnMetB61HnQeth51HnQetR62HnUetx52HnUeth63HnYeuB53HnYetx64Hngeuh55HngeuR66Hnkeux56Hnkeuh67HnoevB57Hnoeux68HnsevR58HnsevB69Hnwevh59HnwevR6+Hn0evx5+Hn0evh6/Hn4ewB5/Hn4evx7AHn8ewR6AHn8ewB7BHoAewh6BHoAewR7CHoEewx6CHoEewh7DHoIexB6DHoIewx7EHoMexR6EHoMexB7FHoQexh6FHoQexR7GHoUexx6GHoUexh7HHoYeyB6HHoYexx7IHoceyR6IHoceyB7JHogeyh6JHogeyR7KHokeyx6KHokeyh7LHooezB6LHooeyx7MHosezR6MHosezB7NHowezh6NHowezR7OHo0ezx6OHo0ezh7PHo4e0B6PHo4ezx7QHo8e0R6QHo8e0B7RHpAe0h6RHpAe0R7SHpEe0x6SHpEe0h7THpIe1B6THpIe0x7UHpMe1R6UHpMe1B7VHpQe1h6VHpQe1R7WHpUe1x6WHpUe1h7XHpYe2B6XHpYe1x7YHpce2R6YHpce2B7ZHpge2h6ZHpge2R7aHpke2x6aHpke2h7bHpoe3B6bHpoe2x7cHpse3R6cHpse3B7dHpwe3h6dHpwe3R7eHp0e3x6eHp0e3h7fHp4e4B6fHp4e3x7gHp8e4R6gHp8e4B7hHqAe4h6hHqAe4R7iHqEe4x6iHqEe4h7jHqIe5B6jHqIe4x7kHqMe5R6kHqMe5B7lHqQe5h6lHqQe5R7mHqUe5x6mHqUe5h7nHqYe6B6nHqYe5x7oHqce6R6oHqce6B7pHqge6h6pHqge6R7qHqke6x6qHqke6h7rHqoe7B6rHqoe6x7sHqse7R6sHqse7B7tHqwe7h6tHqwe7R7uHq0e7x6uHq0e7h7vHq4e8B6vHq4e7x7wHq8e8R6wHq8e8B7xHrAe8h6xHrAe8R7yHrEe8x6yHrEe8h7zHrIe9B6zHrIe8x70HrMe9R60HrMe9B71HrQe9h61HrQe9R72HrUe9x62HrUe9h73HrYe+B63HrYe9x74Hrce+R64Hrce+B75Hrke+x66Hrke+h77Hroe/B67Hroe+x78Hrse/R68Hrse/B79Hrwe/h69Hrwe/R7+Hr0e/x6+Hr0e/h7/Hr4eAB+/Hr4e/x4AH78eAR/AHr8eAB8BH8AeAh/BHsAeAR8CH8EeAx/CHsEeAh8DH8IeBB/DHsIeAx8EH8MeBR/EHsMeBB8FH8QeBh/FHsQeBR8GH8UeBx/GHsUeBh8HH8YeCB/HHsYeBx8IH8ceCR/IHsceCB8JH8geCh/JHsgeCR8KH8keCx/KHskeCh8LH8oeDB/LHsoeCx8MH8seDR/MHsseDB8NH8weDh/NHsweDR8OH80eDx/OHs0eDh8PH84eEB/PHs4eDx8QH88eER/QHs8eEB8RH9AeEh/RHtAeER8SH9EeEx/SHtEeEh8TH9IeFB/THtIeEx8UH9MeFR/UHtMeFB8VH9QeFh/VHtQeFR8WH9UeFx/WHtUeFh8XH9YeGB/XHtYeFx8YH9ceGR/YHtceGB8ZH9geGh/ZHtgeGR8aH9keGx/aHtkeGh8bH9oeHB/bHtoeGx8cH9seHR/cHtseHB8dH9weHh/dHtweHR8eH90eHx/eHt0eHh8fH94eIB/fHt4eHx8gH98eIR/gHt8eIB8hH+AeIh/hHuAeIR8iH+EeIx/iHuEeIh8jH+IeJB/jHuIeIx8kH+MeJR/kHuMeJB8lH+QeJh/lHuQeJR8mH+UeJx/mHuUeJh8nH+YeKB/nHuYeJx8oH+ceKR/oHuceKB8pH+geKh/pHugeKR8qH+keKx/qHukeKh8rH+oeLB/rHuoeKx8sH+seLR/sHuseLB8tH+weLh/tHuweLR8uH+0eLx/uHu0eLh8vH+4eMB/vHu4eLx8wH+8eMR/wHu8eMB8xH/AeMh/xHvAeMR8yH/EeMx/yHvEeMh8zH/IeNB/zHvIeMx80H/MeNR/0HvMeNB81H/QeNh/1HvQeNR82H/UeNx/2HvUeNh83H/YeOB/3HvYeNx84H/ceOR/4HvceOB85H/geOh/5HvgeOR86H/oePB/7HvoeOx88H/sePR/8HvsePB89H/wePh/9HvwePR8+H/0ePx/+Hv0ePh8/H/4eQB//Hv4ePx9AH/8eQR8AH/8eQB9BHwAfQh8BHwAfQR9CHwEfQx8CHwEfQh9DHwIfRB8DHwIfQx9EHwMfRR8EHwMfRB9FHwQfRh8FHwQfRR9GHwUfRx8GHwUfRh9HHwYfSB8HHwYfRx9IHwcfSR8IHwcfSB9JHwgfSh8JHwgfSR9KHwkfSx8KHwkfSh9LHwofTB8LHwofSx9MHwsfTR8MHwsfTB9NHwwfTh8NHwwfTR9OHw0fTx8OHw0fTh9PHw4fUB8PHw4fTx9QHw8fUR8QHw8fUB9RHxAfUh8RHxAfUR9SHxEfUx8SHxEfUh9THxIfVB8THxIfUx9UHxMfVR8UHxMfVB9VHxQfVh8VHxQfVR9WHxUfVx8WHxUfVh9XHxYfWB8XHxYfVx9YHxcfWR8YHxcfWB9ZHxgfWh8ZHxgfWR9aHxkfWx8aHxkfWh9bHxofXB8bHxofWx9cHxsfXR8cHxsfXB9dHxwfXh8dHxwfXR9eHx0fXx8eHx0fXh9fHx4fYB8fHx4fXx9gHx8fYR8gHx8fYB9hHyAfYh8hHyAfYR9iHyEfYx8iHyEfYh9jHyIfZB8jHyIfYx9kHyMfZR8kHyMfZB9lHyQfZh8lHyQfZR9mHyUfZx8mHyUfZh9nHyYfaB8nHyYfZx9oHycfaR8oHycfaB9pHygfah8pHygfaR9qHykfax8qHykfah9rHyofbB8rHyofax9sHysfbR8sHysfbB9tHywfbh8tHywfbR9uHy0fbx8uHy0fbh9vHy4fcB8vHy4fbx9wHy8fcR8wHy8fcB9xHzAfch8xHzAfcR9yHzEfcx8yHzEfch9zHzIfdB8zHzIfcx90HzMfdR80HzMfdB91HzQfdh81HzQfdR92HzUfdx82HzUfdh93HzYfeB83HzYfdx94HzcfeR84HzcfeB95Hzgfeh85HzgfeR96Hzkfex86Hzkfeh97HzsffR88HzsffB99Hzwffh89HzwffR9+Hz0ffx8+Hz0ffh9/Hz4fgB8/Hz4ffx+AHz8fgR9AHz8fgB+BH0Afgh9BH0AfgR+CH0Efgx9CH0Efgh+DH0IfhB9DH0Ifgx+EH0MfhR9EH0MfhB+FH0Qfhh9FH0QfhR+GH0Ufhx9GH0Ufhh+HH0YfiB9HH0Yfhx+IH0cfiR9IH0cfiB+JH0gfih9JH0gfiR+KH0kfix9KH0kfih+LH0ofjB9LH0ofix+MH0sfjR9MH0sfjB+NH0wfjh9NH0wfjR+OH00fjx9OH00fjh+PH04fkB9PH04fjx+QH08fkR9QH08fkB+RH1Afkh9RH1AfkR+SH1Efkx9SH1Efkh+TH1IflB9TH1Ifkx+UH1MflR9UH1MflB+VH1Qflh9VH1QflR+WH1Uflx9WH1Uflh+XH1YfmB9XH1Yflx+YH1cfmR9YH1cfmB+ZH1gfmh9ZH1gfmR+aH1kfmx9aH1kfmh+bH1ofnB9bH1ofmx+cH1sfnR9cH1sfnB+dH1wfnh9dH1wfnR+eH10fnx9eH10fnh+fH14foB9fH14fnx+gH18foR9gH18foB+hH2Afoh9hH2AfoR+iH2Efox9iH2Efoh+jH2IfpB9jH2Ifox+kH2MfpR9kH2MfpB+lH2Qfph9lH2QfpR+mH2Ufpx9mH2Ufph+nH2YfqB9nH2Yfpx+oH2cfqR9oH2cfqB+pH2gfqh9pH2gfqR+qH2kfqx9qH2kfqh+rH2ofrB9rH2ofqx+sH2sfrR9sH2sfrB+tH2wfrh9tH2wfrR+uH20frx9uH20frh+vH24fsB9vH24frx+wH28fsR9wH28fsB+xH3Afsh9xH3AfsR+yH3Efsx9yH3Efsh+zH3IftB9zH3Ifsx+0H3MftR90H3MftB+1H3Qfth91H3QftR+2H3Uftx92H3Ufth+3H3YfuB93H3Yftx+4H3cfuR94H3cfuB+5H3gfuh95H3gfuR+6H3kfux96H3kfuh+7H3ofvB97H3ofux+8H3wfvh99H3wfvR++H30fvx9+H30fvh+/H34fwB9/H34fvx/AH38fwR+AH38fwB/BH4Afwh+BH4AfwR/CH4Efwx+CH4Efwh/DH4IfxB+DH4Ifwx/EH4MfxR+EH4MfxB/FH4Qfxh+FH4QfxR/GH4Ufxx+GH4Ufxh/HH4YfyB+HH4Yfxx/IH4cfyR+IH4cfyB/JH4gfyh+JH4gfyR/KH4kfyx+KH4kfyh/LH4ofzB+LH4ofyx/MH4sfzR+MH4sfzB/NH4wfzh+NH4wfzR/OH40fzx+OH40fzh/PH44f0B+PH44fzx/QH48f0R+QH48f0B/RH5Af0h+RH5Af0R/SH5Ef0x+SH5Ef0h/TH5If1B+TH5If0x/UH5Mf1R+UH5Mf1B/VH5Qf1h+VH5Qf1R/WH5Uf1x+WH5Uf1h/XH5Yf2B+XH5Yf1x/YH5cf2R+YH5cf2B/ZH5gf2h+ZH5gf2R/aH5kf2x+aH5kf2h/bH5of3B+bH5of2x/cH5sf3R+cH5sf3B/dH5wf3h+dH5wf3R/eH50f3x+eH50f3h/fH54f4B+fH54f3x/gH58f4R+gH58f4B/hH6Af4h+hH6Af4R/iH6Ef4x+iH6Ef4h/jH6If5B+jH6If4x/kH6Mf5R+kH6Mf5B/lH6Qf5h+lH6Qf5R/mH6Uf5x+mH6Uf5h/nH6Yf6B+nH6Yf5x/oH6cf6R+oH6cf6B/pH6gf6h+pH6gf6R/qH6kf6x+qH6kf6h/rH6of7B+rH6of6x/sH6sf7R+sH6sf7B/tH6wf7h+tH6wf7R/uH60f7x+uH60f7h/vH64f8B+vH64f7x/wH68f8R+wH68f8B/xH7Af8h+xH7Af8R/yH7Ef8x+yH7Ef8h/zH7If9B+zH7If8x/0H7Mf9R+0H7Mf9B/1H7Qf9h+1H7Qf9R/2H7Uf9x+2H7Uf9h/3H7Yf+B+3H7Yf9x/4H7cf+R+4H7cf+B/5H7gf+h+5H7gf+R/6H7kf+x+6H7kf+h/7H7of/B+7H7of+x/8H7sf/R+8H7sf/B/9H70f/x++H70f/h//H74fACC/H74f/x8AIL8fASDAH78fACABIMAfAiDBH8AfASACIMEfAyDCH8EfAiADIMIfBCDDH8IfAyAEIMMfBSDEH8MfBCAFIMQfBiDFH8QfBSAGIMUfByDGH8UfBiAHIMYfCCDHH8YfByAIIMcfCSDIH8cfCCAJIMgfCiDJH8gfCSAKIMkfCyDKH8kfCiALIMofDCDLH8ofCyAMIMsfDSDMH8sfDCANIMwfDiDNH8wfDSAOIM0fDyDOH80fDiAPIM4fECDPH84fDyAQIM8fESDQH88fECARINAfEiDRH9AfESASINEfEyDSH9EfEiATINIfFCDTH9IfEyAUINMfFSDUH9MfFCAVINQfFiDVH9QfFSAWINUfFyDWH9UfFiAXINYfGCDXH9YfFyAYINcfGSDYH9cfGCAZINgfGiDZH9gfGSAaINkfGyDaH9kfGiAbINofHCDbH9ofGyAcINsfHSDcH9sfHCAdINwfHiDdH9wfHSAeIN0fHyDeH90fHiAfIN4fICDfH94fHyAgIN8fISDgH98fICAhIOAfIiDhH+AfISAiIOEfIyDiH+EfIiAjIOIfJCDjH+IfIyAkIOMfJSDkH+MfJCAlIOQfJiDlH+QfJSAmIOUfJyDmH+UfJiAnIOYfKCDnH+YfJyAoIOcfKSDoH+cfKCApIOgfKiDpH+gfKSAqIOkfKyDqH+kfKiArIOofLCDrH+ofKyAsIOsfLSDsH+sfLCAtIOwfLiDtH+wfLSAuIO0fLyDuH+0fLiAvIO4fMCDvH+4fLyAwIO8fMSDwH+8fMCAxIPAfMiDxH/AfMSAyIPEfMyDyH/EfMiAzIPIfNCDzH/IfMyA0IPMfNSD0H/MfNCA1IPQfNiD1H/QfNSA2IPUfNyD2H/UfNiA3IPYfOCD3H/YfNyA4IPcfOSD4H/cfOCA5IPgfOiD5H/gfOSA6IPkfOyD6H/kfOiA7IPofPCD7H/ofOyA8IPsfPSD8H/sfPCA9IPwfPiD9H/wfPSA+IP4fQCD/H/4fPyBAIP8fQSAAIP8fQCBBIAAgQiABIAAgQSBCIAEgQyACIAEgQiBDIAIgRCADIAIgQyBEIAMgRSAEIAMgRCBFIAQgRiAFIAQgRSBGIAUgRyAGIAUgRiBHIAYgSCAHIAYgRyBIIAcgSSAIIAcgSCBJIAggSiAJIAggSSBKIAkgSyAKIAkgSiBLIAogTCALIAogSyBMIAsgTSAMIAsgTCBNIAwgTiANIAwgTSBOIA0gTyAOIA0gTiBPIA4gUCAPIA4gTyBQIA8gUSAQIA8gUCBRIBAgUiARIBAgUSBSIBEgUyASIBEgUiBTIBIgVCATIBIgUyBUIBMgVSAUIBMgVCBVIBQgViAVIBQgVSBWIBUgVyAWIBUgViBXIBYgWCAXIBYgVyBYIBcgWSAYIBcgWCBZIBggWiAZIBggWSBaIBkgWyAaIBkgWiBbIBogXCAbIBogWyBcIBsgXSAcIBsgXCBdIBwgXiAdIBwgXSBeIB0gXyAeIB0gXiBfIB4gYCAfIB4gXyBgIB8gYSAgIB8gYCBhICAgYiAhICAgYSBiICEgYyAiICEgYiBjICIgZCAjICIgYyBkICMgZSAkICMgZCBlICQgZiAlICQgZSBmICUgZyAmICUgZiBnICYgaCAnICYgZyBoICcgaSAoICcgaCBpICggaiApICggaSBqICkgayAqICkgaiBrICogbCArICogayBsICsgbSAsICsgbCBtICwgbiAtICwgbSBuIC0gbyAuIC0gbiBvIC4gcCAvIC4gbyBwIC8gcSAwIC8gcCBxIDAgciAxIDAgcSByIDEgcyAyIDEgciBzIDIgdCAzIDIgcyB0IDMgdSA0IDMgdCB1IDQgdiA1IDQgdSB2IDUgdyA2IDUgdiB3IDYgeCA3IDYgdyB4IDcgeSA4IDcgeCB5IDggeiA5IDggeSB6IDkgeyA6IDkgeiB7IDogfCA7IDogeyB8IDsgfSA8IDsgfCB9IDwgfiA9IDwgfSB+ID0gfyA+ID0gfiB/ID8ggSBAID8ggCCBIEAggiBBIEAggSCCIEEggyBCIEEggiCDIEIghCBDIEIggyCEIEMghSBEIEMghCCFIEQghiBFIEQghSCGIEUghyBGIEUghiCHIEYgiCBHIEYghyCIIEcgiSBIIEcgiCCJIEggiiBJIEggiSCKIEkgiyBKIEkgiiCLIEogjCBLIEogiyCMIEsgjSBMIEsgjCCNIEwgjiBNIEwgjSCOIE0gjyBOIE0gjiCPIE4gkCBPIE4gjyCQIE8gkSBQIE8gkCCRIFAgkiBRIFAgkSCSIFEgkyBSIFEgkiCTIFIglCBTIFIgkyCUIFMglSBUIFMglCCVIFQgliBVIFQglSCWIFUglyBWIFUgliCXIFYgmCBXIFYglyCYIFcgmSBYIFcgmCCZIFggmiBZIFggmSCaIFkgmyBaIFkgmiCbIFognCBbIFogmyCcIFsgnSBcIFsgnCCdIFwgniBdIFwgnSCeIF0gnyBeIF0gniCfIF4goCBfIF4gnyCgIF8goSBgIF8goCChIGAgoiBhIGAgoSCiIGEgoyBiIGEgoiCjIGIgpCBjIGIgoyCkIGMgpSBkIGMgpCClIGQgpiBlIGQgpSCmIGUgpyBmIGUgpiCnIGYgqCBnIGYgpyCoIGcgqSBoIGcgqCCpIGggqiBpIGggqSCqIGkgqyBqIGkgqiCrIGogrCBrIGogqyCsIGsgrSBsIGsgrCCtIGwgriBtIGwgrSCuIG0gryBuIG0griCvIG4gsCBvIG4gryCwIG8gsSBwIG8gsCCxIHAgsiBxIHAgsSCyIHEgsyByIHEgsiCzIHIgtCBzIHIgsyC0IHMgtSB0IHMgtCC1IHQgtiB1IHQgtSC2IHUgtyB2IHUgtiC3IHYguCB3IHYgtyC4IHcguSB4IHcguCC5IHgguiB5IHgguSC6IHkguyB6IHkguiC7IHogvCB7IHoguyC8IHsgvSB8IHsgvCC9IHwgviB9IHwgvSC+IH0gvyB+IH0gviC/IH4gwCB/IH4gvyDAIIAgwiCBIIAgwSDCIIEgwyCCIIEgwiDDIIIgxCCDIIIgwyDEIIMgxSCEIIMgxCDFIIQgxiCFIIQgxSDGIIUgxyCGIIUgxiDHIIYgyCCHIIYgxyDIIIcgySCIIIcgyCDJIIggyiCJIIggySDKIIkgyyCKIIkgyiDLIIogzCCLIIogyyDMIIsgzSCMIIsgzCDNIIwgziCNIIwgzSDOII0gzyCOII0gziDPII4g0CCPII4gzyDQII8g0SCQII8g0CDRIJAg0iCRIJAg0SDSIJEg0yCSIJEg0iDTIJIg1CCTIJIg0yDUIJMg1SCUIJMg1CDVIJQg1iCVIJQg1SDWIJUg1yCWIJUg1iDXIJYg2CCXIJYg1yDYIJcg2SCYIJcg2CDZIJgg2iCZIJgg2SDaIJkg2yCaIJkg2iDbIJog3CCbIJog2yDcIJsg3SCcIJsg3CDdIJwg3iCdIJwg3SDeIJ0g3yCeIJ0g3iDfIJ4g4CCfIJ4g3yDgIJ8g4SCgIJ8g4CDhIKAg4iChIKAg4SDiIKEg4yCiIKEg4iDjIKIg5CCjIKIg4yDkIKMg5SCkIKMg5CDlIKQg5iClIKQg5SDmIKUg5yCmIKUg5iDnIKYg6CCnIKYg5yDoIKcg6SCoIKcg6CDpIKgg6iCpIKgg6SDqIKkg6yCqIKkg6iDrIKog7CCrIKog6yDsIKsg7SCsIKsg7CDtIKwg7iCtIKwg7SDuIK0g7yCuIK0g7iDvIK4g8CCvIK4g7yDwIK8g8SCwIK8g8CDxILAg8iCxILAg8SDyILEg8yCyILEg8iDzILIg9CCzILIg8yD0ILMg9SC0ILMg9CD1ILQg9iC1ILQg9SD2ILUg9yC2ILUg9iD3ILYg+CC3ILYg9yD4ILcg+SC4ILcg+CD5ILgg+iC5ILgg+SD6ILkg+yC6ILkg+iD7ILog/CC7ILog+yD8ILsg/SC8ILsg/CD9ILwg/iC9ILwg/SD+IL0g/yC+IL0g/iD/IL4gACG/IL4g/yAAIb8gASHAIL8gACEBIcEgAyHCIMEgAiEDIcIgBCHDIMIgAyEEIcMgBSHEIMMgBCEFIcQgBiHFIMQgBSEGIcUgByHGIMUgBiEHIcYgCCHHIMYgByEIIccgCSHIIMcgCCEJIcggCiHJIMggCSEKIckgCyHKIMkgCiELIcogDCHLIMogCyEMIcsgDSHMIMsgDCENIcwgDiHNIMwgDSEOIc0gDyHOIM0gDiEPIc4gECHPIM4gDyEQIc8gESHQIM8gECERIdAgEiHRINAgESESIdEgEyHSINEgEiETIdIgFCHTINIgEyEUIdMgFSHUINMgFCEVIdQgFiHVINQgFSEWIdUgFyHWINUgFiEXIdYgGCHXINYgFyEYIdcgGSHYINcgGCEZIdggGiHZINggGSEaIdkgGyHaINkgGiEbIdogHCHbINogGyEcIdsgHSHcINsgHCEdIdwgHiHdINwgHSEeId0gHyHeIN0gHiEfId4gICHfIN4gHyEgId8gISHgIN8gICEhIeAgIiHhIOAgISEiIeEgIyHiIOEgIiEjIeIgJCHjIOIgIyEkIeMgJSHkIOMgJCElIeQgJiHlIOQgJSEmIeUgJyHmIOUgJiEnIeYgKCHnIOYgJyEoIecgKSHoIOcgKCEpIeggKiHpIOggKSEqIekgKyHqIOkgKiErIeogLCHrIOogKyEsIesgLSHsIOsgLCEtIewgLiHtIOwgLSEuIe0gLyHuIO0gLiEvIe4gMCHvIO4gLyEwIe8gMSHwIO8gMCExIfAgMiHxIPAgMSEyIfEgMyHyIPEgMiEzIfIgNCHzIPIgMyE0IfMgNSH0IPMgNCE1IfQgNiH1IPQgNSE2IfUgNyH2IPUgNiE3IfYgOCH3IPYgNyE4IfcgOSH4IPcgOCE5IfggOiH5IPggOSE6IfkgOyH6IPkgOiE7IfogPCH7IPogOyE8IfsgPSH8IPsgPCE9IfwgPiH9IPwgPSE+If0gPyH+IP0gPiE/If4gQCH/IP4gPyFAIf8gQSEAIf8gQCFBIQAhQiEBIQAhQSFCIQIhRCEDIQIhQyFEIQMhRSEEIQMhRCFFIQQhRiEFIQQhRSFGIQUhRyEGIQUhRiFHIQYhSCEHIQYhRyFIIQchSSEIIQchSCFJIQghSiEJIQghSSFKIQkhSyEKIQkhSiFLIQohTCELIQohSyFMIQshTSEMIQshTCFNIQwhTiENIQwhTSFOIQ0hTyEOIQ0hTiFPIQ4hUCEPIQ4hTyFQIQ8hUSEQIQ8hUCFRIRAhUiERIRAhUSFSIREhUyESIREhUiFTIRIhVCETIRIhUyFUIRMhVSEUIRMhVCFVIRQhViEVIRQhVSFWIRUhVyEWIRUhViFXIRYhWCEXIRYhVyFYIRchWSEYIRchWCFZIRghWiEZIRghWSFaIRkhWyEaIRkhWiFbIRohXCEbIRohWyFcIRshXSEcIRshXCFdIRwhXiEdIRwhXSFeIR0hXyEeIR0hXiFfIR4hYCEfIR4hXyFgIR8hYSEgIR8hYCFhISAhYiEhISAhYSFiISEhYyEiISEhYiFjISIhZCEjISIhYyFkISMhZSEkISMhZCFlISQhZiElISQhZSFmISUhZyEmISUhZiFnISYhaCEnISYhZyFoISchaSEoISchaCFpISghaiEpISghaSFqISkhayEqISkhaiFrISohbCErISohayFsISshbSEsISshbCFtISwhbiEtISwhbSFuIS0hbyEuIS0hbiFvIS4hcCEvIS4hbyFwIS8hcSEwIS8hcCFxITAhciExITAhcSFyITEhcyEyITEhciFzITIhdCEzITIhcyF0ITMhdSE0ITMhdCF1ITQhdiE1ITQhdSF2ITUhdyE2ITUhdiF3ITYheCE3ITYhdyF4ITcheSE4ITcheCF5ITgheiE5ITgheSF6ITkheyE6ITkheiF7ITohfCE7IToheyF8ITshfSE8ITshfCF9ITwhfiE9ITwhfSF+IT0hfyE+IT0hfiF/IT4hgCE/IT4hfyGAIT8hgSFAIT8hgCGBIUAhgiFBIUAhgSGCIUEhgyFCIUEhgiGDIUMhhSFEIUMhhCGFIUQhhiFFIUQhhSGGIUUhhyFGIUUhhiGHIUYhiCFHIUYhhyGIIUchiSFIIUchiCGJIUghiiFJIUghiSGKIUkhiyFKIUkhiiGLIUohjCFLIUohiyGMIUshjSFMIUshjCGNIUwhjiFNIUwhjSGOIU0hjyFOIU0hjiGPIU4hkCFPIU4hjyGQIU8hkSFQIU8hkCGRIVAhkiFRIVAhkSGSIVEhkyFSIVEhkiGTIVIhlCFTIVIhkyGUIVMhlSFUIVMhlCGVIVQhliFVIVQhlSGWIVUhlyFWIVUhliGXIVYhmCFXIVYhlyGYIVchmSFYIVchmCGZIVghmiFZIVghmSGaIVkhmyFaIVkhmiGbIVohnCFbIVohmyGcIVshnSFcIVshnCGdIVwhniFdIVwhnSGeIV0hnyFeIV0hniGfIV4hoCFfIV4hnyGgIV8hoSFgIV8hoCGhIWAhoiFhIWAhoSGiIWEhoyFiIWEhoiGjIWIhpCFjIWIhoyGkIWMhpSFkIWMhpCGlIWQhpiFlIWQhpSGmIWUhpyFmIWUhpiGnIWYhqCFnIWYhpyGoIWchqSFoIWchqCGpIWghqiFpIWghqSGqIWkhqyFqIWkhqiGrIWohrCFrIWohqyGsIWshrSFsIWshrCGtIWwhriFtIWwhrSGuIW0hryFuIW0hriGvIW4hsCFvIW4hryGwIW8hsSFwIW8hsCGxIXAhsiFxIXAhsSGyIXEhsyFyIXEhsiGzIXIhtCFzIXIhsyG0IXMhtSF0IXMhtCG1IXQhtiF1IXQhtSG2IXUhtyF2IXUhtiG3IXYhuCF3IXYhtyG4IXchuSF4IXchuCG5IXghuiF5IXghuSG6IXkhuyF6IXkhuiG7IXohvCF7IXohuyG8IXshvSF8IXshvCG9IXwhviF9IXwhvSG+IX0hvyF+IX0hviG/IX4hwCF/IX4hvyHAIX8hwSGAIX8hwCHBIYAhwiGBIYAhwSHCIYEhwyGCIYEhwiHDIYIhxCGDIYIhwyHEIYQhxiGFIYQhxSHGIYUhxyGGIYUhxiHHIYYhyCGHIYYhxyHIIYchySGIIYchyCHJIYghyiGJIYghySHKIYkhyyGKIYkhyiHLIYohzCGLIYohyyHMIYshzSGMIYshzCHNIYwhziGNIYwhzSHOIY0hzyGOIY0hziHPIY4h0CGPIY4hzyHQIY8h0SGQIY8h0CHRIZAh0iGRIZAh0SHSIZEh0yGSIZEh0iHTIZIh1CGTIZIh0yHUIZMh1SGUIZMh1CHVIZQh1iGVIZQh1SHWIZUh1yGWIZUh1iHXIZYh2CGXIZYh1yHYIZch2SGYIZch2CHZIZgh2iGZIZgh2SHaIZkh2yGaIZkh2iHbIZoh3CGbIZoh2yHcIZsh3SGcIZsh3CHdIZwh3iGdIZwh3SHeIZ0h3yGeIZ0h3iHfIZ4h4CGfIZ4h3yHgIZ8h4SGgIZ8h4CHhIaAh4iGhIaAh4SHiIaEh4yGiIaEh4iHjIaIh5CGjIaIh4yHkIaMh5SGkIaMh5CHlIaQh5iGlIaQh5SHmIaUh5yGmIaUh5iHnIaYh6CGnIaYh5yHoIach6SGoIach6CHpIagh6iGpIagh6SHqIakh6yGqIakh6iHrIaoh7CGrIaoh6yHsIash7SGsIash7CHtIawh7iGtIawh7SHuIa0h7yGuIa0h7iHvIa4h8CGvIa4h7yHwIa8h8SGwIa8h8CHxIbAh8iGxIbAh8SHyIbEh8yGyIbEh8iHzIbIh9CGzIbIh8yH0IbMh9SG0IbMh9CH1IbQh9iG1IbQh9SH2IbUh9yG2IbUh9iH3IbYh+CG3IbYh9yH4Ibch+SG4Ibch+CH5Ibgh+iG5Ibgh+SH6Ibkh+yG6Ibkh+iH7Iboh/CG7Iboh+yH8Ibsh/SG8Ibsh/CH9Ibwh/iG9Ibwh/SH+Ib0h/yG+Ib0h/iH/Ib4hACK/Ib4h/yEAIr8hASLAIb8hACIBIsAhAiLBIcAhASICIsEhAyLCIcEhAiIDIsIhBCLDIcIhAyIEIsMhBSLEIcMhBCIFIsUhByLGIcUhBiIHIsYhCCLHIcYhByIIIschCSLIIcchCCIJIsghCiLJIcghCSIKIskhCyLKIckhCiILIsohDCLLIcohCyIMIsshDSLMIcshDCINIswhDiLNIcwhDSIOIs0hDyLOIc0hDiIPIs4hECLPIc4hDyIQIs8hESLQIc8hECIRItAhEiLRIdAhESISItEhEyLSIdEhEiITItIhFCLTIdIhEyIUItMhFSLUIdMhFCIVItQhFiLVIdQhFSIWItUhFyLWIdUhFiIXItYhGCLXIdYhFyIYItchGSLYIdchGCIZItghGiLZIdghGSIaItkhGyLaIdkhGiIbItohHCLbIdohGyIcItshHSLcIdshHCIdItwhHiLdIdwhHSIeIt0hHyLeId0hHiIfIt4hICLfId4hHyIgIt8hISLgId8hICIhIuAhIiLhIeAhISIiIuEhIyLiIeEhIiIjIuIhJCLjIeIhIyIkIuMhJSLkIeMhJCIlIuQhJiLlIeQhJSImIuUhJyLmIeUhJiInIuYhKCLnIeYhJyIoIuchKSLoIechKCIpIughKiLpIeghKSIqIukhKyLqIekhKiIrIuohLCLrIeohKyIsIushLSLsIeshLCItIuwhLiLtIewhLSIuIu0hLyLuIe0hLiIvIu4hMCLvIe4hLyIwIu8hMSLwIe8hMCIxIvAhMiLxIfAhMSIyIvEhMyLyIfEhMiIzIvIhNCLzIfIhMyI0IvMhNSL0IfMhNCI1IvQhNiL1IfQhNSI2IvUhNyL2IfUhNiI3IvYhOCL3IfYhNyI4IvchOSL4IfchOCI5IvghOiL5IfghOSI6IvkhOyL6IfkhOiI7IvohPCL7IfohOyI8IvshPSL8IfshPCI9IvwhPiL9IfwhPSI+Iv0hPyL+If0hPiI/Iv4hQCL/If4hPyJAIv8hQSIAIv8hQCJBIgAiQiIBIgAiQSJCIgEiQyICIgEiQiJDIgIiRCIDIgIiQyJEIgMiRSIEIgMiRCJFIgQiRiIFIgQiRSJGIgYiSCIHIgYiRyJIIgciSSIIIgciSCJJIggiSiIJIggiSSJKIgkiSyIKIgkiSiJLIgoiTCILIgoiSyJMIgsiTSIMIgsiTCJNIgwiTiINIgwiTSJOIg0iTyIOIg0iTiJPIg4iUCIPIg4iTyJQIg8iUSIQIg8iUCJRIhAiUiIRIhAiUSJSIhEiUyISIhEiUiJTIhIiVCITIhIiUyJUIhMiVSIUIhMiVCJVIhQiViIVIhQiVSJWIhUiVyIWIhUiViJXIhYiWCIXIhYiVyJYIhciWSIYIhciWCJZIhgiWiIZIhgiWSJaIhkiWyIaIhkiWiJbIhoiXCIbIhoiWyJcIhsiXSIcIhsiXCJdIhwiXiIdIhwiXSJeIh0iXyIeIh0iXiJfIh4iYCIfIh4iXyJgIh8iYSIgIh8iYCJhIiAiYiIhIiAiYSJiIiEiYyIiIiEiYiJjIiIiZCIjIiIiYyJkIiMiZSIkIiMiZCJlIiQiZiIlIiQiZSJmIiUiZyImIiUiZiJnIiYiaCInIiYiZyJoIiciaSIoIiciaCJpIigiaiIpIigiaSJqIikiayIqIikiaiJrIioibCIrIioiayJsIisibSIsIisibCJtIiwibiItIiwibSJuIi0ibyIuIi0ibiJvIi4icCIvIi4ibyJwIi8icSIwIi8icCJxIjAiciIxIjAicSJyIjEicyIyIjEiciJzIjIidCIzIjIicyJ0IjMidSI0IjMidCJ1IjQidiI1IjQidSJ2IjUidyI2IjUidiJ3IjYieCI3IjYidyJ4IjcieSI4IjcieCJ5IjgieiI5IjgieSJ6IjkieyI6IjkieiJ7IjoifCI7IjoieyJ8IjsifSI8IjsifCJ9IjwifiI9IjwifSJ+Ij0ifyI+Ij0ifiJ/Ij4igCI/Ij4ifyKAIj8igSJAIj8igCKBIkAigiJBIkAigSKCIkEigyJCIkEigiKDIkIihCJDIkIigyKEIkMihSJEIkMihCKFIkQihiJFIkQihSKGIkUihyJGIkUihiKHIkciiSJIIkciiCKJIkgiiiJJIkgiiSKKIkkiiyJKIkkiiiKLIkoijCJLIkoiiyKMIksijSJMIksijCKNIkwijiJNIkwijSKOIk0ijyJOIk0ijiKPIk4ikCJPIk4ijyKQIk8ikSJQIk8ikCKRIlAikiJRIlAikSKSIlEikyJSIlEikiKTIlIilCJTIlIikyKUIlMilSJUIlMilCKVIlQiliJVIlQilSKWIlUilyJWIlUiliKXIlYimCJXIlYilyKYIlcimSJYIlcimCKZIlgimiJZIlgimSKaIlkimyJaIlkimiKbIloinCJbIloimyKcIlsinSJcIlsinCKdIlwiniJdIlwinSKeIl0inyJeIl0iniKfIl4ioCJfIl4inyKgIl8ioSJgIl8ioCKhImAioiJhImAioSKiImEioyJiImEioiKjImIipCJjImIioyKkImMipSJkImMipCKlImQipiJlImQipSKmImUipyJmImUipiKnImYiqCJnImYipyKoImciqSJoImciqCKpImgiqiJpImgiqSKqImkiqyJqImkiqiKrImoirCJrImoiqyKsImsirSJsImsirCKtImwiriJtImwirSKuIm0iryJuIm0iriKvIm4isCJvIm4iryKwIm8isSJwIm8isCKxInAisiJxInAisSKyInEisyJyInEisiKzInIitCJzInIisyK0InMitSJ0InMitCK1InQitiJ1InQitSK2InUityJ2InUitiK3InYiuCJ3InYityK4InciuSJ4InciuCK5IngiuiJ5IngiuSK6InkiuyJ6InkiuiK7InoivCJ7InoiuyK8InsivSJ8InsivCK9InwiviJ9InwivSK+In0ivyJ+In0iviK/In4iwCJ/In4ivyLAIn8iwSKAIn8iwCLBIoAiwiKBIoAiwSLCIoEiwyKCIoEiwiLDIoIixCKDIoIiwyLEIoMixSKEIoMixCLFIoQixiKFIoQixSLGIoUixyKGIoUixiLHIoYiyCKHIoYixyLIIogiyiKJIogiySLKIokiyyKKIokiyiLLIooizCKLIooiyyLMIosizSKMIosizCLNIowiziKNIowizSLOIo0izyKOIo0iziLPIo4i0CKPIo4izyLQIo8i0SKQIo8i0CLRIpAi0iKRIpAi0SLSIpEi0yKSIpEi0iLTIpIi1CKTIpIi0yLUIpMi1SKUIpMi1CLVIpQi1iKVIpQi1SLWIpUi1yKWIpUi1iLXIpYi2CKXIpYi1yLYIpci2SKYIpci2CLZIpgi2iKZIpgi2SLaIpki2yKaIpki2iLbIpoi3CKbIpoi2yLcIpsi3SKcIpsi3CLdIpwi3iKdIpwi3SLeIp0i3yKeIp0i3iLfIp4i4CKfIp4i3yLgIp8i4SKgIp8i4CLhIqAi4iKhIqAi4SLiIqEi4yKiIqEi4iLjIqIi5CKjIqIi4yLkIqMi5SKkIqMi5CLlIqQi5iKlIqQi5SLmIqUi5yKmIqUi5iLnIqYi6CKnIqYi5yLoIqci6SKoIqci6CLpIqgi6iKpIqgi6SLqIqki6yKqIqki6iLrIqoi7CKrIqoi6yLsIqsi7SKsIqsi7CLtIqwi7iKtIqwi7SLuIq0i7yKuIq0i7iLvIq4i8CKvIq4i7yLwIq8i8SKwIq8i8CLxIrAi8iKxIrAi8SLyIrEi8yKyIrEi8iLzIrIi9CKzIrIi8yL0IrMi9SK0IrMi9CL1IrQi9iK1IrQi9SL2IrUi9yK2IrUi9iL3IrYi+CK3IrYi9yL4Irci+SK4Irci+CL5Irgi+iK5Irgi+SL6Irki+yK6Irki+iL7Iroi/CK7Iroi+yL8Irsi/SK8Irsi/CL9Irwi/iK9Irwi/SL+Ir0i/yK+Ir0i/iL/Ir4iACO/Ir4i/yIAI78iASPAIr8iACMBI8AiAiPBIsAiASMCI8EiAyPCIsEiAiMDI8IiBCPDIsIiAyMEI8MiBSPEIsMiBCMFI8QiBiPFIsQiBSMGI8UiByPGIsUiBiMHI8YiCCPHIsYiByMII8ciCSPIIsciCCMJI8kiCyPKIskiCiMLI8oiDCPLIsoiCyMMI8siDSPMIssiDCMNI8wiDiPNIswiDSMOI80iDyPOIs0iDiMPI84iECPPIs4iDyMQI88iESPQIs8iECMRI9AiEiPRItAiESMSI9EiEyPSItEiEiMTI9IiFCPTItIiEyMUI9MiFSPUItMiFCMVI9QiFiPVItQiFSMWI9UiFyPWItUiFiMXI9YiGCPXItYiFyMYI9ciGSPYItciGCMZI9giGiPZItgiGSMaI9kiGyPaItkiGiMbI9oiHCPbItoiGyMcI9siHSPcItsiHCMdI9wiHiPdItwiHSMeI90iHyPeIt0iHiMfI94iICPfIt4iHyMgI98iISPgIt8iICMhI+AiIiPhIuAiISMiI+EiIyPiIuEiIiMjI+IiJCPjIuIiIyMkI+MiJSPkIuMiJCMlI+QiJiPlIuQiJSMmI+UiJyPmIuUiJiMnI+YiKCPnIuYiJyMoI+ciKSPoIuciKCMpI+giKiPpIugiKSMqI+kiKyPqIukiKiMrI+oiLCPrIuoiKyMsI+siLSPsIusiLCMtI+wiLiPtIuwiLSMuI+0iLyPuIu0iLiMvI+4iMCPvIu4iLyMwI+8iMSPwIu8iMCMxI/AiMiPxIvAiMSMyI/EiMyPyIvEiMiMzI/IiNCPzIvIiMyM0I/MiNSP0IvMiNCM1I/QiNiP1IvQiNSM2I/UiNyP2IvUiNiM3I/YiOCP3IvYiNyM4I/ciOSP4IvciOCM5I/giOiP5IvgiOSM6I/kiOyP6IvkiOiM7I/oiPCP7IvoiOyM8I/siPSP8IvsiPCM9I/wiPiP9IvwiPSM+I/0iPyP+Iv0iPiM/I/4iQCP/Iv4iPyNAI/8iQSMAI/8iQCNBIwAjQiMBIwAjQSNCIwEjQyMCIwEjQiNDIwIjRCMDIwIjQyNEIwMjRSMEIwMjRCNFIwQjRiMFIwQjRSNGIwUjRyMGIwUjRiNHIwYjSCMHIwYjRyNIIwcjSSMIIwcjSCNJIwgjSiMJIwgjSSNKIwojTCMLIwojSyNMIwsjTSMMIwsjTCNNIwwjTiMNIwwjTSNOIw0jTyMOIw0jTiNPIw4jUCMPIw4jTyNQIw8jUSMQIw8jUCNRIxAjUiMRIxAjUSNSIxEjUyMSIxEjUiNTIxIjVCMTIxIjUyNUIxMjVSMUIxMjVCNVIxQjViMVIxQjVSNWIxUjVyMWIxUjViNXIxYjWCMXIxYjVyNYIxcjWSMYIxcjWCNZIxgjWiMZIxgjWSNaIxkjWyMaIxkjWiNbIxojXCMbIxojWyNcIxsjXSMcIxsjXCNdIxwjXiMdIxwjXSNeIx0jXyMeIx0jXiNfIx4jYCMfIx4jXyNgIx8jYSMgIx8jYCNhIyAjYiMhIyAjYSNiIyEjYyMiIyEjYiNjIyIjZCMjIyIjYyNkIyMjZSMkIyMjZCNlIyQjZiMlIyQjZSNmIyUjZyMmIyUjZiNnIyYjaCMnIyYjZyNoIycjaSMoIycjaCNpIygjaiMpIygjaSNqIykjayMqIykjaiNrIyojbCMrIyojayNsIysjbSMsIysjbCNtIywjbiMtIywjbSNuIy0jbyMuIy0jbiNvIy4jcCMvIy4jbyNwIy8jcSMwIy8jcCNxIzAjciMxIzAjcSNyIzEjcyMyIzEjciNzIzIjdCMzIzIjcyN0IzMjdSM0IzMjdCN1IzQjdiM1IzQjdSN2IzUjdyM2IzUjdiN3IzYjeCM3IzYjdyN4IzcjeSM4IzcjeCN5IzgjeiM5IzgjeSN6IzkjeyM6IzkjeiN7IzojfCM7IzojeyN8IzsjfSM8IzsjfCN9IzwjfiM9IzwjfSN+Iz0jfyM+Iz0jfiN/Iz4jgCM/Iz4jfyOAIz8jgSNAIz8jgCOBI0AjgiNBI0AjgSOCI0EjgyNCI0EjgiODI0IjhCNDI0IjgyOEI0MjhSNEI0MjhCOFI0QjhiNFI0QjhSOGI0UjhyNGI0UjhiOHI0YjiCNHI0YjhyOII0cjiSNII0cjiCOJI0gjiiNJI0gjiSOKI0kjiyNKI0kjiiOLI0sjjSNMI0sjjCONI0wjjiNNI0wjjSOOI00jjyNOI00jjiOPI04jkCNPI04jjyOQI08jkSNQI08jkCORI1AjkiNRI1AjkSOSI1EjkyNSI1EjkiOTI1IjlCNTI1IjkyOUI1MjlSNUI1MjlCOVI1QjliNVI1QjlSOWI1UjlyNWI1UjliOXI1YjmCNXI1YjlyOYI1cjmSNYI1cjmCOZI1gjmiNZI1gjmSOaI1kjmyNaI1kjmiObI1ojnCNbI1ojmyOcI1sjnSNcI1sjnCOdI1wjniNdI1wjnSOeI10jnyNeI10jniOfI14joCNfI14jnyOgI18joSNgI18joCOhI2AjoiNhI2AjoSOiI2EjoyNiI2EjoiOjI2IjpCNjI2IjoyOkI2MjpSNkI2MjpCOlI2QjpiNlI2QjpSOmI2UjpyNmI2UjpiOnI2YjqCNnI2YjpyOoI2cjqSNoI2cjqCOpI2gjqiNpI2gjqSOqI2kjqyNqI2kjqiOrI2ojrCNrI2ojqyOsI2sjrSNsI2sjrCOtI2wjriNtI2wjrSOuI20jryNuI20jriOvI24jsCNvI24jryOwI28jsSNwI28jsCOxI3AjsiNxI3AjsSOyI3EjsyNyI3EjsiOzI3IjtCNzI3IjsyO0I3MjtSN0I3MjtCO1I3QjtiN1I3QjtSO2I3UjtyN2I3UjtiO3I3YjuCN3I3YjtyO4I3cjuSN4I3cjuCO5I3gjuiN5I3gjuSO6I3kjuyN6I3kjuiO7I3ojvCN7I3ojuyO8I3sjvSN8I3sjvCO9I3wjviN9I3wjvSO+I30jvyN+I30jviO/I34jwCN/I34jvyPAI38jwSOAI38jwCPBI4AjwiOBI4AjwSPCI4EjwyOCI4EjwiPDI4IjxCODI4IjwyPEI4MjxSOEI4MjxCPFI4QjxiOFI4QjxSPGI4UjxyOGI4UjxiPHI4YjyCOHI4YjxyPII4cjySOII4cjyCPJI4gjyiOJI4gjySPKI4kjyyOKI4kjyiPLI4ojzCOLI4ojyyPMI4wjziONI4wjzSPOI40jzyOOI40jziPPI44j0COPI44jzyPQI48j0SOQI48j0CPRI5Aj0iORI5Aj0SPSI5Ej0yOSI5Ej0iPTI5Ij1COTI5Ij0yPUI5Mj1SOUI5Mj1CPVI5Qj1iOVI5Qj1SPWI5Uj1yOWI5Uj1iPXI5Yj2COXI5Yj1yPYI5cj2SOYI5cj2CPZI5gj2iOZI5gj2SPaI5kj2yOaI5kj2iPbI5oj3CObI5oj2yPcI5sj3SOcI5sj3CPdI5wj3iOdI5wj3SPeI50j3yOeI50j3iPfI54j4COfI54j3yPgI58j4SOgI58j4CPhI6Aj4iOhI6Aj4SPiI6Ej4yOiI6Ej4iPjI6Ij5COjI6Ij4yPkI6Mj5SOkI6Mj5CPlI6Qj5iOlI6Qj5SPmI6Uj5yOmI6Uj5iPnI6Yj6COnI6Yj5yPoI6cj6SOoI6cj6CPpI6gj6iOpI6gj6SPqI6kj6yOqI6kj6iPrI6oj7COrI6oj6yPsI6sj7SOsI6sj7CPtI6wj7iOtI6wj7SPuI60j7yOuI60j7iPvI64j8COvI64j7yPwI68j8SOwI68j8CPxI7Aj8iOxI7Aj8SPyI7Ej8yOyI7Ej8iPzI7Ij9COzI7Ij8yP0I7Mj9SO0I7Mj9CP1I7Qj9iO1I7Qj9SP2I7Uj9yO2I7Uj9iP3I7Yj+CO3I7Yj9yP4I7cj+SO4I7cj+CP5I7gj+iO5I7gj+SP6I7kj+yO6I7kj+iP7I7oj/CO7I7oj+yP8I7sj/SO8I7sj/CP9I7wj/iO9I7wj/SP+I70j/yO+I70j/iP/I74jACS/I74j/yMAJL8jASTAI78jACQBJMAjAiTBI8AjASQCJMEjAyTCI8EjAiQDJMIjBCTDI8IjAyQEJMMjBSTEI8MjBCQFJMQjBiTFI8QjBSQGJMUjByTGI8UjBiQHJMYjCCTHI8YjByQIJMcjCSTII8cjCCQJJMgjCiTJI8gjCSQKJMkjCyTKI8kjCiQLJMojDCTLI8ojCyQMJMsjDSTMI8sjDCQNJM0jDyTOI80jDiQPJM4jECTPI84jDyQQJM8jESTQI88jECQRJNAjEiTRI9AjESQSJNEjEyTSI9EjEiQTJNIjFCTTI9IjEyQUJNMjFSTUI9MjFCQVJNQjFiTVI9QjFSQWJNUjFyTWI9UjFiQXJNYjGCTXI9YjFyQYJNcjGSTYI9cjGCQZJNgjGiTZI9gjGSQaJNkjGyTaI9kjGiQbJNojHCTbI9ojGyQcJNsjHSTcI9sjHCQdJNwjHiTdI9wjHSQeJN0jHyTeI90jHiQfJN4jICTfI94jHyQgJN8jISTgI98jICQhJOAjIiThI+AjISQiJOEjIyTiI+EjIiQjJOIjJCTjI+IjIyQkJOMjJSTkI+MjJCQlJOQjJiTlI+QjJSQmJOUjJyTmI+UjJiQnJOYjKCTnI+YjJyQoJOcjKSToI+cjKCQpJOgjKiTpI+gjKSQqJOkjKyTqI+kjKiQrJOojLCTrI+ojKyQsJOsjLSTsI+sjLCQtJOwjLiTtI+wjLSQuJO0jLyTuI+0jLiQvJO4jMCTvI+4jLyQwJO8jMSTwI+8jMCQxJPAjMiTxI/AjMSQyJPEjMyTyI/EjMiQzJPIjNCTzI/IjMyQ0JPMjNST0I/MjNCQ1JPQjNiT1I/QjNSQ2JPUjNyT2I/UjNiQ3JPYjOCT3I/YjNyQ4JPcjOST4I/cjOCQ5JPgjOiT5I/gjOSQ6JPkjOyT6I/kjOiQ7JPojPCT7I/ojOyQ8JPsjPST8I/sjPCQ9JPwjPiT9I/wjPSQ+JP0jPyT+I/0jPiQ/JP4jQCT/I/4jPyRAJP8jQSQAJP8jQCRBJAAkQiQBJAAkQSRCJAEkQyQCJAEkQiRDJAIkRCQDJAIkQyREJAMkRSQEJAMkRCRFJAQkRiQFJAQkRSRGJAUkRyQGJAUkRiRHJAYkSCQHJAYkRyRIJAckSSQIJAckSCRJJAgkSiQJJAgkSSRKJAkkSyQKJAkkSiRLJAokTCQLJAokSyRMJAskTSQMJAskTCRNJAwkTiQNJAwkTSROJA4kUCQPJA4kTyRQJA8kUSQQJA8kUCRRJBAkUiQRJBAkUSRSJBEkUyQSJBEkUiRTJBIkVCQTJBIkUyRUJBMkVSQUJBMkVCRVJBQkViQVJBQkVSRWJBUkVyQWJBUkViRXJBYkWCQXJBYkVyRYJBckWSQYJBckWCRZJBgkWiQZJBgkWSRaJBkkWyQaJBkkWiRbJBokXCQbJBokWyRcJBskXSQcJBskXCRdJBwkXiQdJBwkXSReJB0kXyQeJB0kXiRfJB4kYCQfJB4kXyRgJB8kYSQgJB8kYCRhJCAkYiQhJCAkYSRiJCEkYyQiJCEkYiRjJCIkZCQjJCIkYyRkJCMkZSQkJCMkZCRlJCQkZiQlJCQkZSRmJCUkZyQmJCUkZiRnJCYkaCQnJCYkZyRoJCckaSQoJCckaCRpJCgkaiQpJCgkaSRqJCkkayQqJCkkaiRrJCokbCQrJCokayRsJCskbSQsJCskbCRtJCwkbiQtJCwkbSRuJC0kbyQuJC0kbiRvJC4kcCQvJC4kbyRwJC8kcSQwJC8kcCRxJDAkciQxJDAkcSRyJDEkcyQyJDEkciRzJDIkdCQzJDIkcyR0JDMkdSQ0JDMkdCR1JDQkdiQ1JDQkdSR2JDUkdyQ2JDUkdiR3JDYkeCQ3JDYkdyR4JDckeSQ4JDckeCR5JDgkeiQ5JDgkeSR6JDkkeyQ6JDkkeiR7JDokfCQ7JDokeyR8JDskfSQ8JDskfCR9JDwkfiQ9JDwkfSR+JD0kfyQ+JD0kfiR/JD4kgCQ/JD4kfySAJD8kgSRAJD8kgCSBJEAkgiRBJEAkgSSCJEEkgyRCJEEkgiSDJEIkhCRDJEIkgySEJEMkhSREJEMkhCSFJEQkhiRFJEQkhSSGJEUkhyRGJEUkhiSHJEYkiCRHJEYkhySIJEckiSRIJEckiCSJJEgkiiRJJEgkiSSKJEkkiyRKJEkkiiSLJEokjCRLJEokiySMJEskjSRMJEskjCSNJEwkjiRNJEwkjSSOJE0kjyROJE0kjiSPJE8kkSRQJE8kkCSRJFAkkiRRJFAkkSSSJFEkkyRSJFEkkiSTJFIklCRTJFIkkySUJFMklSRUJFMklCSVJFQkliRVJFQklSSWJFUklyRWJFUkliSXJFYkmCRXJFYklySYJFckmSRYJFckmCSZJFgkmiRZJFgkmSSaJFkkmyRaJFkkmiSbJFoknCRbJFokmyScJFsknSRcJFsknCSdJFwkniRdJFwknSSeJF0knyReJF0kniSfJF4koCRfJF4knySgJF8koSRgJF8koCShJGAkoiRhJGAkoSSiJGEkoyRiJGEkoiSjJGIkpCRjJGIkoySkJGMkpSRkJGMkpCSlJGQkpiRlJGQkpSSmJGUkpyRmJGUkpiSnJGYkqCRnJGYkpySoJGckqSRoJGckqCSpJGgkqiRpJGgkqSSqJGkkqyRqJGkkqiSrJGokrCRrJGokqySsJGskrSRsJGskrCStJGwkriRtJGwkrSSuJG0kryRuJG0kriSvJG4ksCRvJG4krySwJG8ksSRwJG8ksCSxJHAksiRxJHAksSSyJHEksyRyJHEksiSzJHIktCRzJHIksyS0JHMktSR0JHMktCS1JHQktiR1JHQktSS2JHUktyR2JHUktiS3JHYkuCR3JHYktyS4JHckuSR4JHckuCS5JHgkuiR5JHgkuSS6JHkkuyR6JHkkuiS7JHokvCR7JHokuyS8JHskvSR8JHskvCS9JHwkviR9JHwkvSS+JH0kvyR+JH0kviS/JH4kwCR/JH4kvyTAJH8kwSSAJH8kwCTBJIAkwiSBJIAkwSTCJIEkwySCJIEkwiTDJIIkxCSDJIIkwyTEJIMkxSSEJIMkxCTFJIQkxiSFJIQkxSTGJIUkxySGJIUkxiTHJIYkyCSHJIYkxyTIJIckySSIJIckyCTJJIgkyiSJJIgkySTKJIkkyySKJIkkyiTLJIokzCSLJIokyyTMJIskzSSMJIskzCTNJIwkziSNJIwkzSTOJI0kzySOJI0kziTPJI4k0CSPJI4kzyTQJJAk0iSRJJAk0STSJJEk0ySSJJEk0iTTJJIk1CSTJJIk0yTUJJMk1SSUJJMk1CTVJJQk1iSVJJQk1STWJJUk1ySWJJUk1iTXJJYk2CSXJJYk1yTYJJck2SSYJJck2CTZJJgk2iSZJJgk2STaJJkk2ySaJJkk2iTbJJok3CSbJJok2yTcJJsk3SScJJsk3CTdJJwk3iSdJJwk3STeJJ0k3ySeJJ0k3iTfJJ4k4CSfJJ4k3yTgJJ8k4SSgJJ8k4CThJKAk4iShJKAk4STiJKEk4ySiJKEk4iTjJKIk5CSjJKIk4yTkJKMk5SSkJKMk5CTlJKQk5iSlJKQk5STmJKUk5ySmJKUk5iTnJKYk6CSnJKYk5yToJKck6SSoJKck6CTpJKgk6iSpJKgk6STqJKkk6ySqJKkk6iTrJKok7CSrJKok6yTsJKsk7SSsJKsk7CTtJKwk7iStJKwk7STuJK0k7ySuJK0k7iTvJK4k8CSvJK4k7yTwJK8k8SSwJK8k8CTxJLAk8iSxJLAk8STyJLEk8ySyJLEk8iTzJLIk9CSzJLIk8yT0JLMk9SS0JLMk9CT1JLQk9iS1JLQk9ST2JLUk9yS2JLUk9iT3JLYk+CS3JLYk9yT4JLck+SS4JLck+CT5JLgk+iS5JLgk+ST6JLkk+yS6JLkk+iT7JLok/CS7JLok+yT8JLsk/SS8JLsk/CT9JLwk/iS9JLwk/ST+JL0k/yS+JL0k/iT/JL4kACW/JL4k/yQAJb8kASXAJL8kACUBJcAkAiXBJMAkASUCJcEkAyXCJMEkAiUDJcIkBCXDJMIkAyUEJcMkBSXEJMMkBCUFJcQkBiXFJMQkBSUGJcUkByXGJMUkBiUHJcYkCCXHJMYkByUIJcckCSXIJMckCCUJJcgkCiXJJMgkCSUKJckkCyXKJMkkCiULJcokDCXLJMokCyUMJcskDSXMJMskDCUNJcwkDiXNJMwkDSUOJc0kDyXOJM0kDiUPJc4kECXPJM4kDyUQJc8kESXQJM8kECURJdEkEyXSJNEkEiUTJdIkFCXTJNIkEyUUJdMkFSXUJNMkFCUVJdQkFiXVJNQkFSUWJdUkFyXWJNUkFiUXJdYkGCXXJNYkFyUYJdckGSXYJNckGCUZJdgkGiXZJNgkGSUaJdkkGyXaJNkkGiUbJdokHCXbJNokGyUcJdskHSXcJNskHCUdJdwkHiXdJNwkHSUeJd0kHyXeJN0kHiUfJd4kICXfJN4kHyUgJd8kISXgJN8kICUhJeAkIiXhJOAkISUiJeEkIyXiJOEkIiUjJeIkJCXjJOIkIyUkJeMkJSXkJOMkJCUlJeQkJiXlJOQkJSUmJeUkJyXmJOUkJiUnJeYkKCXnJOYkJyUoJeckKSXoJOckKCUpJegkKiXpJOgkKSUqJekkKyXqJOkkKiUrJeokLCXrJOokKyUsJeskLSXsJOskLCUtJewkLiXtJOwkLSUuJe0kLyXuJO0kLiUvJe4kMCXvJO4kLyUwJe8kMSXwJO8kMCUxJfAkMiXxJPAkMSUyJfEkMyXyJPEkMiUzJfIkNCXzJPIkMyU0JfMkNSX0JPMkNCU1JfQkNiX1JPQkNSU2JfUkNyX2JPUkNiU3JfYkOCX3JPYkNyU4JfckOSX4JPckOCU5JfgkOiX5JPgkOSU6JfkkOyX6JPkkOiU7JfokPCX7JPokOyU8JfskPSX8JPskPCU9JfwkPiX9JPwkPSU+Jf0kPyX+JP0kPiU/Jf4kQCX/JP4kPyVAJf8kQSUAJf8kQCVBJQAlQiUBJQAlQSVCJQElQyUCJQElQiVDJQIlRCUDJQIlQyVEJQMlRSUEJQMlRCVFJQQlRiUFJQQlRSVGJQUlRyUGJQUlRiVHJQYlSCUHJQYlRyVIJQclSSUIJQclSCVJJQglSiUJJQglSSVKJQklSyUKJQklSiVLJQolTCULJQolSyVMJQslTSUMJQslTCVNJQwlTiUNJQwlTSVOJQ0lTyUOJQ0lTiVPJQ4lUCUPJQ4lTyVQJQ8lUSUQJQ8lUCVRJRAlUiURJRAlUSVSJRIlVCUTJRIlUyVUJRMlVSUUJRMlVCVVJRQlViUVJRQlVSVWJRUlVyUWJRUlViVXJRYlWCUXJRYlVyVYJRclWSUYJRclWCVZJRglWiUZJRglWSVaJRklWyUaJRklWiVbJRolXCUbJRolWyVcJRslXSUcJRslXCVdJRwlXiUdJRwlXSVeJR0lXyUeJR0lXiVfJR4lYCUfJR4lXyVgJR8lYSUgJR8lYCVhJSAlYiUhJSAlYSViJSElYyUiJSElYiVjJSIlZCUjJSIlYyVkJSMlZSUkJSMlZCVlJSQlZiUlJSQlZSVmJSUlZyUmJSUlZiVnJSYlaCUnJSYlZyVoJSclaSUoJSclaCVpJSglaiUpJSglaSVqJSklayUqJSklaiVrJSolbCUrJSolayVsJSslbSUsJSslbCVtJSwlbiUtJSwlbSVuJS0lbyUuJS0lbiVvJS4lcCUvJS4lbyVwJS8lcSUwJS8lcCVxJTAlciUxJTAlcSVyJTElcyUyJTElciVzJTIldCUzJTIlcyV0JTMldSU0JTMldCV1JTQldiU1JTQldSV2JTUldyU2JTUldiV3JTYleCU3JTYldyV4JTcleSU4JTcleCV5JTgleiU5JTgleSV6JTkleyU6JTkleiV7JTolfCU7JToleyV8JTslfSU8JTslfCV9JTwlfiU9JTwlfSV+JT0lfyU+JT0lfiV/JT4lgCU/JT4lfyWAJT8lgSVAJT8lgCWBJUAlgiVBJUAlgSWCJUElgyVCJUElgiWDJUIlhCVDJUIlgyWEJUMlhSVEJUMlhCWFJUQlhiVFJUQlhSWGJUUlhyVGJUUlhiWHJUYliCVHJUYlhyWIJUcliSVIJUcliCWJJUgliiVJJUgliSWKJUkliyVKJUkliiWLJUoljCVLJUoliyWMJUsljSVMJUsljCWNJUwljiVNJUwljSWOJU0ljyVOJU0ljiWPJU4lkCVPJU4ljyWQJU8lkSVQJU8lkCWRJVAlkiVRJVAlkSWSJVElkyVSJVElkiWTJVMllSVUJVMllCWVJVQlliVVJVQllSWWJVUllyVWJVUlliWXJVYlmCVXJVYllyWYJVclmSVYJVclmCWZJVglmiVZJVglmSWaJVklmyVaJVklmiWbJVolnCVbJVolmyWcJVslnSVcJVslnCWdJVwlniVdJVwlnSWeJV0lnyVeJV0lniWfJV4loCVfJV4lnyWgJV8loSVgJV8loCWhJWAloiVhJWAloSWiJWEloyViJWEloiWjJWIlpCVjJWIloyWkJWMlpSVkJWMlpCWlJWQlpiVlJWQlpSWmJWUlpyVmJWUlpiWnJWYlqCVnJWYlpyWoJWclqSVoJWclqCWpJWglqiVpJWglqSWqJWklqyVqJWklqiWrJWolrCVrJWolqyWsJWslrSVsJWslrCWtJWwlriVtJWwlrSWuJW0lryVuJW0lriWvJW4lsCVvJW4lryWwJW8lsSVwJW8lsCWxJXAlsiVxJXAlsSWyJXElsyVyJXElsiWzJXIltCVzJXIlsyW0JXMltSV0JXMltCW1JXQltiV1JXQltSW2JXUltyV2JXUltiW3JXYluCV3JXYltyW4JXcluSV4JXcluCW5JXgluiV5JXgluSW6JXkluyV6JXkluiW7JXolvCV7JXoluyW8JXslvSV8JXslvCW9JXwlviV9JXwlvSW+JX0lvyV+JX0lviW/JX4lwCV/JX4lvyXAJX8lwSWAJX8lwCXBJYAlwiWBJYAlwSXCJYElwyWCJYElwiXDJYIlxCWDJYIlwyXEJYMlxSWEJYMlxCXFJYQlxiWFJYQlxSXGJYUlxyWGJYUlxiXHJYYlyCWHJYYlxyXIJYclySWIJYclyCXJJYglyiWJJYglySXKJYklyyWKJYklyiXLJYolzCWLJYolyyXMJYslzSWMJYslzCXNJYwlziWNJYwlzSXOJY0lzyWOJY0lziXPJY4l0CWPJY4lzyXQJY8l0SWQJY8l0CXRJZAl0iWRJZAl0SXSJZEl0yWSJZEl0iXTJZIl1CWTJZIl0yXUJZQl1iWVJZQl1SXWJZUl1yWWJZUl1iXXJZYl2CWXJZYl1yXYJZcl2SWYJZcl2CXZJZgl2iWZJZgl2SXaJZkl2yWaJZkl2iXbJZol3CWbJZol2yXcJZsl3SWcJZsl3CXdJZwl3iWdJZwl3SXeJZ0l3yWeJZ0l3iXfJZ4l4CWfJZ4l3yXgJZ8l4SWgJZ8l4CXhJaAl4iWhJaAl4SXiJaEl4yWiJaEl4iXjJaIl5CWjJaIl4yXkJaMl5SWkJaMl5CXlJaQl5iWlJaQl5SXmJaUl5yWmJaUl5iXnJaYl6CWnJaYl5yXoJacl6SWoJacl6CXpJagl6iWpJagl6SXqJakl6yWqJakl6iXrJaol7CWrJaol6yXsJasl7SWsJasl7CXtJawl7iWtJawl7SXuJa0l7yWuJa0l7iXvJa4l8CWvJa4l7yXwJa8l8SWwJa8l8CXxJbAl8iWxJbAl8SXyJbEl8yWyJbEl8iXzJbIl9CWzJbIl8yX0JbMl9SW0JbMl9CX1JbQl9iW1JbQl9SX2JbUl9yW2JbUl9iX3JbYl+CW3JbYl9yX4Jbcl+SW4Jbcl+CX5Jbgl+iW5Jbgl+SX6Jbkl+yW6Jbkl+iX7Jbol/CW7Jbol+yX8Jbsl/SW8Jbsl/CX9Jbwl/iW9Jbwl/SX+Jb0l/yW+Jb0l/iX/Jb4lACa/Jb4l/yUAJr8lASbAJb8lACYBJsAlAibBJcAlASYCJsElAybCJcElAiYDJsIlBCbDJcIlAyYEJsMlBSbEJcMlBCYFJsQlBibFJcQlBSYGJsUlBybGJcUlBiYHJsYlCCbHJcYlByYIJsclCSbIJcclCCYJJsglCibJJcglCSYKJsklCybKJcklCiYLJsolDCbLJcolCyYMJsslDSbMJcslDCYNJswlDibNJcwlDSYOJs0lDybOJc0lDiYPJs4lECbPJc4lDyYQJs8lESbQJc8lECYRJtAlEibRJdAlESYSJtElEybSJdElEiYTJtIlFCbTJdIlEyYUJtMlFSbUJdMlFCYVJtUlFybWJdUlFiYXJtYlGCbXJdYlFyYYJtclGSbYJdclGCYZJtglGibZJdglGSYaJtklGybaJdklGiYbJtolHCbbJdolGyYcJtslHSbcJdslHCYdJtwlHibdJdwlHSYeJt0lHybeJd0lHiYfJt4lICbfJd4lHyYgJt8lISbgJd8lICYhJuAlIibhJeAlISYiJuElIybiJeElIiYjJuIlJCbjJeIlIyYkJuMlJSbkJeMlJCYlJuQlJiblJeQlJSYmJuUlJybmJeUlJiYnJuYlKCbnJeYlJyYoJuclKSboJeclKCYpJuglKibpJeglKSYqJuklKybqJeklKiYrJuolLCbrJeolKyYsJuslLSbsJeslLCYtJuwlLibtJewlLSYuJu0lLybuJe0lLiYvJu4lMCbvJe4lLyYwJu8lMSbwJe8lMCYxJvAlMibxJfAlMSYyJvElMybyJfElMiYzJvIlNCbzJfIlMyY0JvMlNSb0JfMlNCY1JvQlNib1JfQlNSY2JvUlNyb2JfUlNiY3JvYlOCb3JfYlNyY4JvclOSb4JfclOCY5JvglOib5JfglOSY6JvklOyb6JfklOiY7JvolPCb7JfolOyY8JvslPSb8JfslPCY9JvwlPib9JfwlPSY+Jv0lPyb+Jf0lPiY/Jv4lQCb/Jf4lPyZAJv8lQSYAJv8lQCZBJgAmQiYBJgAmQSZCJgEmQyYCJgEmQiZDJgImRCYDJgImQyZEJgMmRSYEJgMmRCZFJgQmRiYFJgQmRSZGJgUmRyYGJgUmRiZHJgYmSCYHJgYmRyZIJgcmSSYIJgcmSCZJJggmSiYJJggmSSZKJgkmSyYKJgkmSiZLJgomTCYLJgomSyZMJgsmTSYMJgsmTCZNJgwmTiYNJgwmTSZOJg0mTyYOJg0mTiZPJg4mUCYPJg4mTyZQJg8mUSYQJg8mUCZRJhAmUiYRJhAmUSZSJhEmUyYSJhEmUiZTJhImVCYTJhImUyZUJhMmVSYUJhMmVCZVJhQmViYVJhQmVSZWJhYmWCYXJhYmVyZYJhcmWSYYJhcmWCZZJhgmWiYZJhgmWSZaJhkmWyYaJhkmWiZbJhomXCYbJhomWyZcJhsmXSYcJhsmXCZdJhwmXiYdJhwmXSZeJh0mXyYeJh0mXiZfJh4mYCYfJh4mXyZgJh8mYSYgJh8mYCZhJiAmYiYhJiAmYSZiJiEmYyYiJiEmYiZjJiImZCYjJiImYyZkJiMmZSYkJiMmZCZlJiQmZiYlJiQmZSZmJiUmZyYmJiUmZiZnJiYmaCYnJiYmZyZoJicmaSYoJicmaCZpJigmaiYpJigmaSZqJikmayYqJikmaiZrJiombCYrJiomayZsJismbSYsJismbCZtJiwmbiYtJiwmbSZuJi0mbyYuJi0mbiZvJi4mcCYvJi4mbyZwJi8mcSYwJi8mcCZxJjAmciYxJjAmcSZyJjEmcyYyJjEmciZzJjImdCYzJjImcyZ0JjMmdSY0JjMmdCZ1JjQmdiY1JjQmdSZ2JjUmdyY2JjUmdiZ3JjYmeCY3JjYmdyZ4JjcmeSY4JjcmeCZ5JjgmeiY5JjgmeSZ6JjkmeyY6JjkmeiZ7JjomfCY7JjomeyZ8JjsmfSY8JjsmfCZ9JjwmfiY9JjwmfSZ+Jj0mfyY+Jj0mfiZ/Jj4mgCY/Jj4mfyaAJj8mgSZAJj8mgCaBJkAmgiZBJkAmgSaCJkEmgyZCJkEmgiaDJkImhCZDJkImgyaEJkMmhSZEJkMmhCaFJkQmhiZFJkQmhSaGJkUmhyZGJkUmhiaHJkYmiCZHJkYmhyaIJkcmiSZIJkcmiCaJJkgmiiZJJkgmiSaKJkkmiyZKJkkmiiaLJkomjCZLJkomiyaMJksmjSZMJksmjCaNJkwmjiZNJkwmjSaOJk0mjyZOJk0mjiaPJk4mkCZPJk4mjyaQJk8mkSZQJk8mkCaRJlAmkiZRJlAmkSaSJlEmkyZSJlEmkiaTJlImlCZTJlImkyaUJlMmlSZUJlMmlCaVJlQmliZVJlQmlSaWJlUmlyZWJlUmliaXJlcmmSZYJlcmmCaZJlgmmiZZJlgmmSaaJlkmmyZaJlkmmiabJlomnCZbJlommyacJlsmnSZcJlsmnCadJlwmniZdJlwmnSaeJl0mnyZeJl0mniafJl4moCZfJl4mnyagJl8moSZgJl8moCahJmAmoiZhJmAmoSaiJmEmoyZiJmEmoiajJmImpCZjJmImoyakJmMmpSZkJmMmpCalJmQmpiZlJmQmpSamJmUmpyZmJmUmpianJmYmqCZnJmYmpyaoJmcmqSZoJmcmqCapJmgmqiZpJmgmqSaqJmkmqyZqJmkmqiarJmomrCZrJmomqyasJmsmrSZsJmsmrCatJmwmriZtJmwmrSauJm0mryZuJm0mriavJm4msCZvJm4mryawJm8msSZwJm8msCaxJnAmsiZxJnAmsSayJnEmsyZyJnEmsiazJnImtCZzJnImsya0JnMmtSZ0JnMmtCa1JnQmtiZ1JnQmtSa2JnUmtyZ2JnUmtia3JnYmuCZ3JnYmtya4JncmuSZ4JncmuCa5JngmuiZ5JngmuSa6JnkmuyZ6Jnkmuia7JnomvCZ7Jnomuya8JnsmvSZ8JnsmvCa9JnwmviZ9JnwmvSa+Jn0mvyZ+Jn0mvia/Jn4mwCZ/Jn4mvybAJn8mwSaAJn8mwCbBJoAmwiaBJoAmwSbCJoEmwyaCJoEmwibDJoImxCaDJoImwybEJoMmxSaEJoMmxCbFJoQmxiaFJoQmxSbGJoUmxyaGJoUmxibHJoYmyCaHJoYmxybIJocmySaIJocmyCbJJogmyiaJJogmySbKJokmyyaKJokmyibLJoomzCaLJoomyybMJosmzSaMJosmzCbNJowmziaNJowmzSbOJo0mzyaOJo0mzibPJo4m0CaPJo4mzybQJo8m0SaQJo8m0CbRJpAm0iaRJpAm0SbSJpEm0yaSJpEm0ibTJpIm1CaTJpIm0ybUJpMm1SaUJpMm1CbVJpQm1iaVJpQm1SbWJpUm1yaWJpUm1ibXJpYm2CaXJpYm1ybYJpgm2iaZJpgm2SbaJpkm2yaaJpkm2ibbJpom3CabJpom2ybcJpsm3SacJpsm3CbdJpwm3iadJpwm3SbeJp0m3yaeJp0m3ibfJp4m4CafJp4m3ybgJp8m4SagJp8m4CbhJqAm4iahJqAm4SbiJqEm4yaiJqEm4ibjJqIm5CajJqIm4ybkJqMm5SakJqMm5CblJqQm5ialJqQm5SbmJqUm5yamJqUm5ibnJqYm6CanJqYm5yboJqcm6SaoJqcm6CbpJqgm6iapJqgm6SbqJqkm6yaqJqkm6ibrJqom7CarJqom6ybsJqsm7SasJqsm7CbtJqwm7iatJqwm7SbuJq0m7yauJq0m7ibvJq4m8CavJq4m7ybwJq8m8SawJq8m8CbxJrAm8iaxJrAm8SbyJrEm8yayJrEm8ibzJrIm9CazJrIm8yb0JrMm9Sa0JrMm9Cb1JrQm9ia1JrQm9Sb2JrUm9ya2JrUm9ib3JrYm+Ca3JrYm9yb4Jrcm+Sa4Jrcm+Cb5Jrgm+ia5Jrgm+Sb6Jrkm+ya6Jrkm+ib7Jrom/Ca7Jrom+yb8Jrsm/Sa8Jrsm/Cb9Jrwm/ia9Jrwm/Sb+Jr0m/ya+Jr0m/ib/Jr4mACe/Jr4m/yYAJ78mASfAJr8mACcBJ8AmAifBJsAmAScCJ8EmAyfCJsEmAicDJ8ImBCfDJsImAycEJ8MmBSfEJsMmBCcFJ8QmBifFJsQmBScGJ8UmByfGJsUmBicHJ8YmCCfHJsYmBycIJ8cmCSfIJscmCCcJJ8gmCifJJsgmCScKJ8kmCyfKJskmCicLJ8omDCfLJsomCycMJ8smDSfMJssmDCcNJ8wmDifNJswmDScOJ80mDyfOJs0mDicPJ84mECfPJs4mDycQJ88mESfQJs8mECcRJ9AmEifRJtAmEScSJ9EmEyfSJtEmEicTJ9ImFCfTJtImEycUJ9MmFSfUJtMmFCcVJ9QmFifVJtQmFScWJ9UmFyfWJtUmFicXJ9YmGCfXJtYmFycYJ9cmGSfYJtcmGCcZJ9kmGyfaJtkmGicbJ9omHCfbJtomGyccJ9smHSfcJtsmHCcdJ9wmHifdJtwmHSceJ90mHyfeJt0mHicfJ94mICffJt4mHycgJ98mISfgJt8mICchJ+AmIifhJuAmISciJ+EmIyfiJuEmIicjJ+ImJCfjJuImIyckJ+MmJSfkJuMmJCclJ+QmJiflJuQmJScmJ+UmJyfmJuUmJicnJ+YmKCfnJuYmJycoJ+cmKSfoJucmKCcpJ+gmKifpJugmKScqJ+kmKyfqJukmKicrJ+omLCfrJuomKycsJ+smLSfsJusmLCctJ+wmLiftJuwmLScuJ+0mLyfuJu0mLicvJ+4mMCfvJu4mLycwJ+8mMSfwJu8mMCcxJ/AmMifxJvAmMScyJ/EmMyfyJvEmMiczJ/ImNCfzJvImMyc0J/MmNSf0JvMmNCc1J/QmNif1JvQmNSc2J/UmNyf2JvUmNic3J/YmOCf3JvYmNyc4J/cmOSf4JvcmOCc5J/gmOif5JvgmOSc6J/kmOyf6JvkmOic7J/omPCf7JvomOyc8J/smPSf8JvsmPCc9J/wmPif9JvwmPSc+J/0mPyf+Jv0mPic/J/4mQCf/Jv4mPydAJ/8mQScAJ/8mQCdBJwAnQicBJwAnQSdCJwEnQycCJwEnQidDJwInRCcDJwInQydEJwMnRScEJwMnRCdFJwQnRicFJwQnRSdGJwUnRycGJwUnRidHJwYnSCcHJwYnRydIJwcnSScIJwcnSCdJJwgnSicJJwgnSSdKJwknSycKJwknSidLJwonTCcLJwonSydMJwsnTScMJwsnTCdNJwwnTicNJwwnTSdOJw0nTycOJw0nTidPJw4nUCcPJw4nTydQJw8nUScQJw8nUCdRJxAnUicRJxAnUSdSJxEnUycSJxEnUidTJxInVCcTJxInUydUJxMnVScUJxMnVCdVJxQnVicVJxQnVSdWJxUnVycWJxUnVidXJxYnWCcXJxYnVydYJxcnWScYJxcnWCdZJxgnWicZJxgnWSdaJxonXCcbJxonWydcJxsnXSccJxsnXCddJxwnXicdJxwnXSdeJx0nXyceJx0nXidfJx4nYCcfJx4nXydgJx8nYScgJx8nYCdhJyAnYichJyAnYSdiJyEnYyciJyEnYidjJyInZCcjJyInYydkJyMnZSckJyMnZCdlJyQnZiclJyQnZSdmJyUnZycmJyUnZidnJyYnaCcnJyYnZydoJycnaScoJycnaCdpJygnaicpJygnaSdqJyknaycqJyknaidrJyonbCcrJyonaydsJysnbScsJysnbCdtJywnbictJywnbSduJy0nbycuJy0nbidvJy4ncCcvJy4nbydwJy8ncScwJy8ncCdxJzAncicxJzAncSdyJzEncycyJzEncidzJzIndCczJzIncyd0JzMndSc0JzMndCd1JzQndic1JzQndSd2JzUndyc2JzUndid3JzYneCc3JzYndyd4JzcneSc4JzcneCd5Jzgneic5JzgneSd6Jzkneyc6Jzkneid7JzonfCc7Jzoneyd8JzsnfSc8JzsnfCd9Jzwnfic9JzwnfSd+Jz0nfyc+Jz0nfid/Jz4ngCc/Jz4nfyeAJz8ngSdAJz8ngCeBJ0AngidBJ0AngSeCJ0EngydCJ0EngieDJ0InhCdDJ0IngyeEJ0MnhSdEJ0MnhCeFJ0QnhidFJ0QnhSeGJ0UnhydGJ0UnhieHJ0YniCdHJ0YnhyeIJ0cniSdIJ0cniCeJJ0gniidJJ0gniSeKJ0kniydKJ0kniieLJ0onjCdLJ0oniyeMJ0snjSdMJ0snjCeNJ0wnjidNJ0wnjSeOJ00njydOJ00njiePJ04nkCdPJ04njyeQJ08nkSdQJ08nkCeRJ1AnkidRJ1AnkSeSJ1EnkydSJ1EnkieTJ1InlCdTJ1InkyeUJ1MnlSdUJ1MnlCeVJ1QnlidVJ1QnlSeWJ1UnlydWJ1UnlieXJ1YnmCdXJ1YnlyeYJ1cnmSdYJ1cnmCeZJ1gnmidZJ1gnmSeaJ1knmydaJ1knmiebJ1snnSdcJ1snnCedJ1wnniddJ1wnnSeeJ10nnydeJ10nniefJ14noCdfJ14nnyegJ18noSdgJ18noCehJ2AnoidhJ2AnoSeiJ2EnoydiJ2EnoiejJ2InpCdjJ2InoyekJ2MnpSdkJ2MnpCelJ2QnpidlJ2QnpSemJ2UnpydmJ2UnpienJ2YnqCdnJ2YnpyeoJ2cnqSdoJ2cnqCepJ2gnqidpJ2gnqSeqJ2knqydqJ2knqierJ2onrCdrJ2onqyesJ2snrSdsJ2snrCetJ2wnridtJ2wnrSeuJ20nryduJ20nrievJ24nsCdvJ24nryewJ28nsSdwJ28nsCexJ3AnsidxJ3AnsSeyJ3EnsydyJ3EnsiezJ3IntCdzJ3Insye0J3MntSd0J3MntCe1J3Qntid1J3QntSe2J3Untyd2J3Untie3J3YnuCd3J3Yntye4J3cnuSd4J3cnuCe5J3gnuid5J3gnuSe6J3knuyd6J3knuie7J3onvCd7J3onuye8J3snvSd8J3snvCe9J3wnvid9J3wnvSe+J30nvyd+J30nvie/J34nwCd/J34nvyfAJ38nwSeAJ38nwCfBJ4AnwieBJ4AnwSfCJ4EnwyeCJ4EnwifDJ4InxCeDJ4InwyfEJ4MnxSeEJ4MnxCfFJ4QnxieFJ4QnxSfGJ4UnxyeGJ4UnxifHJ4YnyCeHJ4YnxyfIJ4cnySeIJ4cnyCfJJ4gnyieJJ4gnySfKJ4knyyeKJ4knyifLJ4onzCeLJ4onyyfMJ4snzSeMJ4snzCfNJ4wnzieNJ4wnzSfOJ40nzyeOJ40nzifPJ44n0CePJ44nzyfQJ48n0SeQJ48n0CfRJ5An0ieRJ5An0SfSJ5En0yeSJ5En0ifTJ5In1CeTJ5In0yfUJ5Mn1SeUJ5Mn1CfVJ5Qn1ieVJ5Qn1SfWJ5Un1yeWJ5Un1ifXJ5Yn2CeXJ5Yn1yfYJ5cn2SeYJ5cn2CfZJ5gn2ieZJ5gn2SfaJ5kn2yeaJ5kn2ifbJ5on3CebJ5on2yfcJ5wn3iedJ5wn3SfeJ50n3yeeJ50n3iffJ54n4CefJ54n3yfgJ58n4SegJ58n4CfhJ6An4iehJ6An4SfiJ6En4yeiJ6En4ifjJ6In5CejJ6In4yfkJ6Mn5SekJ6Mn5CflJ6Qn5ielJ6Qn5SfmJ6Un5yemJ6Un5ifnJ6Yn6CenJ6Yn5yfoJ6cn6SeoJ6cn6CfpJ6gn6iepJ6gn6SfqJ6kn6yeqJ6kn6ifrJ6on7CerJ6on6yfsJ6sn7SesJ6sn7CftJ6wn7ietJ6wn7SfuJ60n7yeuJ60n7ifvJ64n8CevJ64n7yfwJ68n8SewJ68n8CfxJ7An8iexJ7An8SfyJ7En8yeyJ7En8ifzJ7In9CezJ7In8yf0J7Mn9Se0J7Mn9Cf1J7Qn9ie1J7Qn9Sf2J7Un9ye2J7Un9if3J7Yn+Ce3J7Yn9yf4J7cn+Se4J7cn+Cf5J7gn+ie5J7gn+Sf6J7kn+ye6J7kn+if7J7on/Ce7J7on+yf8J7sn/Se8J7sn/Cf9J7wn/ie9J7wn/Sf+J70n/ye+J70n/if/J74nACi/J74n/ycAKL8nASjAJ78nACgBKMAnAijBJ8AnASgCKMEnAyjCJ8EnAigDKMInBCjDJ8InAygEKMMnBSjEJ8MnBCgFKMQnBijFJ8QnBSgGKMUnByjGJ8UnBigHKMYnCCjHJ8YnBygIKMcnCSjIJ8cnCCgJKMgnCijJJ8gnCSgKKMknCyjKJ8knCigLKMonDCjLJ8onCygMKMsnDSjMJ8snDCgNKMwnDijNJ8wnDSgOKM0nDyjOJ80nDigPKM4nECjPJ84nDygQKM8nESjQJ88nECgRKNAnEijRJ9AnESgSKNEnEyjSJ9EnEigTKNInFCjTJ9InEygUKNMnFSjUJ9MnFCgVKNQnFijVJ9QnFSgWKNUnFyjWJ9UnFigXKNYnGCjXJ9YnFygYKNcnGSjYJ9cnGCgZKNgnGijZJ9gnGSgaKNknGyjaJ9knGigbKNonHCjbJ9onGygcKNsnHSjcJ9snHCgdKN0nHyjeJ90nHigfKN4nICjfJ94nHyggKN8nISjgJ98nICghKOAnIijhJ+AnISgiKOEnIyjiJ+EnIigjKOInJCjjJ+InIygkKOMnJSjkJ+MnJCglKOQnJijlJ+QnJSgmKOUnJyjmJ+UnJignKOYnKCjnJ+YnJygoKOcnKSjoJ+cnKCgpKOgnKijpJ+gnKSgqKOknKyjqJ+knKigrKOonLCjrJ+onKygsKOsnLSjsJ+snLCgtKOwnLijtJ+wnLSguKO0nLyjuJ+0nLigvKO4nMCjvJ+4nLygwKO8nMSjwJ+8nMCgxKPAnMijxJ/AnMSgyKPEnMyjyJ/EnMigzKPInNCjzJ/InMyg0KPMnNSj0J/MnNCg1KPQnNij1J/QnNSg2KPUnNyj2J/UnNig3KPYnOCj3J/YnNyg4KPcnOSj4J/cnOCg5KPgnOij5J/gnOSg6KPknOyj6J/knOig7KPonPCj7J/onOyg8KPsnPSj8J/snPCg9KPwnPij9J/wnPSg+KP0nPyj+J/0nPig/KP4nQCj/J/4nPyhAKP8nQSgAKP8nQChBKAAoQigBKAAoQShCKAEoQygCKAEoQihDKAIoRCgDKAIoQyhEKAMoRSgEKAMoRChFKAQoRigFKAQoRShGKAUoRygGKAUoRihHKAYoSCgHKAYoRyhIKAcoSSgIKAcoSChJKAgoSigJKAgoSShKKAkoSygKKAkoSihLKAooTCgLKAooSyhMKAsoTSgMKAsoTChNKAwoTigNKAwoTShOKA0oTygOKA0oTihPKA4oUCgPKA4oTyhQKA8oUSgQKA8oUChRKBAoUigRKBAoUShSKBEoUygSKBEoUihTKBIoVCgTKBIoUyhUKBMoVSgUKBMoVChVKBQoVigVKBQoVShWKBUoVygWKBUoVihXKBYoWCgXKBYoVyhYKBcoWSgYKBcoWChZKBgoWigZKBgoWShaKBkoWygaKBkoWihbKBooXCgbKBooWyhcKBsoXSgcKBsoXChdKBwoXigdKBwoXSheKB4oYCgfKB4oXyhgKB8oYSggKB8oYChhKCAoYighKCAoYShiKCEoYygiKCEoYihjKCIoZCgjKCIoYyhkKCMoZSgkKCMoZChlKCQoZiglKCQoZShmKCUoZygmKCUoZihnKCYoaCgnKCYoZyhoKCcoaSgoKCcoaChpKCgoaigpKCgoaShqKCkoaygqKCkoaihrKCoobCgrKCooayhsKCsobSgsKCsobChtKCwobigtKCwobShuKC0obyguKC0obihvKC4ocCgvKC4obyhwKC8ocSgwKC8ocChxKDAocigxKDAocShyKDEocygyKDEocihzKDIodCgzKDIocyh0KDModSg0KDModCh1KDQodig1KDQodSh2KDUodyg2KDUodih3KDYoeCg3KDYodyh4KDcoeSg4KDcoeCh5KDgoeig5KDgoeSh6KDkoeyg6KDkoeih7KDoofCg7KDooeyh8KDsofSg8KDsofCh9KDwofig9KDwofSh+KD0ofyg+KD0ofih/KD4ogCg/KD4ofyiAKD8ogShAKD8ogCiBKEAogihBKEAogSiCKEEogyhCKEEogiiDKEIohChDKEIogyiEKEMohShEKEMohCiFKEQohihFKEQohSiGKEUohyhGKEUohiiHKEYoiChHKEYohyiIKEcoiShIKEcoiCiJKEgoiihJKEgoiSiKKEkoiyhKKEkoiiiLKEoojChLKEooiyiMKEsojShMKEsojCiNKEwojihNKEwojSiOKE0ojyhOKE0ojiiPKE4okChPKE4ojyiQKE8okShQKE8okCiRKFAokihRKFAokSiSKFEokyhSKFEokiiTKFIolChTKFIokyiUKFMolShUKFMolCiVKFQolihVKFQolSiWKFUolyhWKFUoliiXKFYomChXKFYolyiYKFcomShYKFcomCiZKFgomihZKFgomSiaKFkomyhaKFkomiibKFoonChbKFoomyicKFsonShcKFsonCidKFwonihdKFwonSieKF0onyheKF0oniifKF8ooShgKF8ooCihKGAooihhKGAooSiiKGEooyhiKGEooiijKGIopChjKGIooyikKGMopShkKGMopCilKGQopihlKGQopSimKGUopyhmKGUopiinKGYoqChnKGYopyioKGcoqShoKGcoqCipKGgoqihpKGgoqSiqKGkoqyhqKGkoqiirKGoorChrKGooqyisKGsorShsKGsorCitKGworihtKGworSiuKG0oryhuKG0oriivKG4osChvKG4oryiwKG8osShwKG8osCixKHAosihxKHAosSiyKHEosyhyKHEosiizKHIotChzKHIosyi0KHMotSh0KHMotCi1KHQotih1KHQotSi2KHUotyh2KHUotii3KHYouCh3KHYotyi4KHcouSh4KHcouCi5KHgouih5KHgouSi6KHkouyh6KHkouii7KHoovCh7KHoouyi8KHsovSh8KHsovCi9KHwovih9KHwovSi+KH0ovyh+KH0ovii/KH4owCh/KH4ovyjAKH8owSiAKH8owCjBKIAowiiBKIAowSjCKIEowyiCKIEowijDKIIoxCiDKIIowyjEKIMoxSiEKIMoxCjFKIQoxiiFKIQoxSjGKIUoxyiGKIUoxijHKIYoyCiHKIYoxyjIKIcoySiIKIcoyCjJKIgoyiiJKIgoySjKKIkoyyiKKIkoyijLKIoozCiLKIooyyjMKIsozSiMKIsozCjNKIwoziiNKIwozSjOKI0ozyiOKI0ozijPKI4o0CiPKI4ozyjQKI8o0SiQKI8o0CjRKJAo0iiRKJAo0SjSKJEo0yiSKJEo0ijTKJIo1CiTKJIo0yjUKJMo1SiUKJMo1CjVKJQo1iiVKJQo1SjWKJUo1yiWKJUo1ijXKJYo2CiXKJYo1yjYKJco2SiYKJco2CjZKJgo2iiZKJgo2SjaKJko2yiaKJko2ijbKJoo3CibKJoo2yjcKJso3SicKJso3CjdKJwo3iidKJwo3SjeKJ0o3yieKJ0o3ijfKJ4o4CifKJ4o3yjgKKAo4iihKKAo4SjiKKEo4yiiKKEo4ijjKKIo5CijKKIo4yjkKKMo5SikKKMo5CjlKKQo5iilKKQo5SjmKKUo5yimKKUo5ijnKKYo6CinKKYo5yjoKKco6SioKKco6CjpKKgo6iipKKgo6SjqKKko6yiqKKko6ijrKKoo7CirKKoo6yjsKKso7SisKKso7CjtKKwo7iitKKwo7SjuKK0o7yiuKK0o7ijvKK4o8CivKK4o7yjwKK8o8SiwKK8o8CjxKLAo8iixKLAo8SjyKLEo8yiyKLEo8ijzKLIo9CizKLIo8yj0KLMo9Si0KLMo9Cj1KLQo9ii1KLQo9Sj2KLUo9yi2KLUo9ij3KLYo+Ci3KLYo9yj4KLco+Si4KLco+Cj5KLgo+ii5KLgo+Sj6KLko+yi6KLko+ij7KLoo/Ci7KLoo+yj8KLso/Si8KLso/Cj9KLwo/ii9KLwo/Sj+KL0o/yi+KL0o/ij/KL4oACm/KL4o/ygAKb8oASnAKL8oACkBKcAoAinBKMAoASkCKcEoAynCKMEoAikDKcIoBCnDKMIoAykEKcMoBSnEKMMoBCkFKcQoBinFKMQoBSkGKcUoBynGKMUoBikHKcYoCCnHKMYoBykIKccoCSnIKMcoCCkJKcgoCinJKMgoCSkKKckoCynKKMkoCikLKcooDCnLKMooCykMKcsoDSnMKMsoDCkNKcwoDinNKMwoDSkOKc0oDynOKM0oDikPKc4oECnPKM4oDykQKc8oESnQKM8oECkRKdAoEinRKNAoESkSKdEoEynSKNEoEikTKdIoFCnTKNIoEykUKdMoFSnUKNMoFCkVKdQoFinVKNQoFSkWKdUoFynWKNUoFikXKdYoGCnXKNYoFykYKdcoGSnYKNcoGCkZKdgoGinZKNgoGSkaKdkoGynaKNkoGikbKdooHCnbKNooGykcKdsoHSncKNsoHCkdKdwoHindKNwoHSkeKd0oHyneKN0oHikfKd4oICnfKN4oHykgKd8oISngKN8oICkhKeEoIyniKOEoIikjKeIoJCnjKOIoIykkKeMoJSnkKOMoJCklKeQoJinlKOQoJSkmKeUoJynmKOUoJiknKeYoKCnnKOYoJykoKecoKSnoKOcoKCkpKegoKinpKOgoKSkqKekoKynqKOkoKikrKeooLCnrKOooKyksKesoLSnsKOsoLCktKewoLintKOwoLSkuKe0oLynuKO0oLikvKe4oMCnvKO4oLykwKe8oMSnwKO8oMCkxKfAoMinxKPAoMSkyKfEoMynyKPEoMikzKfIoNCnzKPIoMyk0KfMoNSn0KPMoNCk1KfQoNin1KPQoNSk2KfUoNyn2KPUoNik3KfYoOCn3KPYoNyk4KfcoOSn4KPcoOCk5KfgoOin5KPgoOSk6KfkoOyn6KPkoOik7KfooPCn7KPooOyk8KfsoPSn8KPsoPCk9KfwoPin9KPwoPSk+Kf0oPyn+KP0oPik/Kf4oQCn/KP4oPylAKf8oQSkAKf8oQClBKQApQikBKQApQSlCKQEpQykCKQEpQilDKQIpRCkDKQIpQylEKQMpRSkEKQMpRClFKQQpRikFKQQpRSlGKQUpRykGKQUpRilHKQYpSCkHKQYpRylIKQcpSSkIKQcpSClJKQgpSikJKQgpSSlKKQkpSykKKQkpSilLKQopTCkLKQopSylMKQspTSkMKQspTClNKQwpTikNKQwpTSlOKQ0pTykOKQ0pTilPKQ4pUCkPKQ4pTylQKQ8pUSkQKQ8pUClRKRApUikRKRApUSlSKREpUykSKREpUilTKRIpVCkTKRIpUylUKRMpVSkUKRMpVClVKRQpVikVKRQpVSlWKRUpVykWKRUpVilXKRYpWCkXKRYpVylYKRcpWSkYKRcpWClZKRgpWikZKRgpWSlaKRkpWykaKRkpWilbKRopXCkbKRopWylcKRspXSkcKRspXCldKRwpXikdKRwpXSleKR0pXykeKR0pXilfKR4pYCkfKR4pXylgKR8pYSkgKR8pYClhKSApYikhKSApYSliKSIpZCkjKSIpYylkKSMpZSkkKSMpZCllKSQpZiklKSQpZSlmKSUpZykmKSUpZilnKSYpaCknKSYpZyloKScpaSkoKScpaClpKSgpaikpKSgpaSlqKSkpaykqKSkpailrKSopbCkrKSopaylsKSspbSksKSspbCltKSwpbiktKSwpbSluKS0pbykuKS0pbilvKS4pcCkvKS4pbylwKS8pcSkwKS8pcClxKTApcikxKTApcSlyKTEpcykyKTEpcilzKTIpdCkzKTIpcyl0KTMpdSk0KTMpdCl1KTQpdik1KTQpdSl2KTUpdyk2KTUpdil3KTYpeCk3KTYpdyl4KTcpeSk4KTcpeCl5KTgpeik5KTgpeSl6KTkpeyk6KTkpeil7KTopfCk7KTopeyl8KTspfSk8KTspfCl9KTwpfik9KTwpfSl+KT0pfyk+KT0pfil/KT4pgCk/KT4pfymAKT8pgSlAKT8pgCmBKUApgilBKUApgSmCKUEpgylCKUEpgimDKUIphClDKUIpgymEKUMphSlEKUMphCmFKUQphilFKUQphSmGKUUphylGKUUphimHKUYpiClHKUYphymIKUcpiSlIKUcpiCmJKUgpiilJKUgpiSmKKUkpiylKKUkpiimLKUopjClLKUopiymMKUspjSlMKUspjCmNKUwpjilNKUwpjSmOKU0pjylOKU0pjimPKU4pkClPKU4pjymQKU8pkSlQKU8pkCmRKVApkilRKVApkSmSKVEpkylSKVEpkimTKVIplClTKVIpkymUKVMplSlUKVMplCmVKVQplilVKVQplSmWKVUplylWKVUplimXKVYpmClXKVYplymYKVcpmSlYKVcpmCmZKVgpmilZKVgpmSmaKVkpmylaKVkpmimbKVopnClbKVopmymcKVspnSlcKVspnCmdKVwpnildKVwpnSmeKV0pnyleKV0pnimfKV4poClfKV4pnymgKV8poSlgKV8poCmhKWApoilhKWApoSmiKWEpoyliKWEpoimjKWMppSlkKWMppCmlKWQppillKWQppSmmKWUppylmKWUppimnKWYpqClnKWYppymoKWcpqSloKWcpqCmpKWgpqilpKWgpqSmqKWkpqylqKWkpqimrKWoprClrKWopqymsKWsprSlsKWsprCmtKWwpriltKWwprSmuKW0pryluKW0primvKW4psClvKW4prymwKW8psSlwKW8psCmxKXApsilxKXApsSmyKXEpsylyKXEpsimzKXIptClzKXIpsym0KXMptSl0KXMptCm1KXQptil1KXQptSm2KXUptyl2KXUptim3KXYpuCl3KXYptym4KXcpuSl4KXcpuCm5KXgpuil5KXgpuSm6KXkpuyl6KXkpuim7KXopvCl7KXopuym8KXspvSl8KXspvCm9KXwpvil9KXwpvSm+KX0pvyl+KX0pvim/KX4pwCl/KX4pvynAKX8pwSmAKX8pwCnBKYApwimBKYApwSnCKYEpwymCKYEpwinDKYIpxCmDKYIpwynEKYMpxSmEKYMpxCnFKYQpximFKYQpxSnGKYUpxymGKYUpxinHKYYpyCmHKYYpxynIKYcpySmIKYcpyCnJKYgpyimJKYgpySnKKYkpyymKKYkpyinLKYopzCmLKYopyynMKYspzSmMKYspzCnNKYwpzimNKYwpzSnOKY0pzymOKY0pzinPKY4p0CmPKY4pzynQKY8p0SmQKY8p0CnRKZAp0imRKZAp0SnSKZEp0ymSKZEp0inTKZIp1CmTKZIp0ynUKZMp1SmUKZMp1CnVKZQp1imVKZQp1SnWKZUp1ymWKZUp1inXKZYp2CmXKZYp1ynYKZcp2SmYKZcp2CnZKZgp2imZKZgp2SnaKZkp2ymaKZkp2inbKZop3CmbKZop2yncKZsp3SmcKZsp3CndKZwp3imdKZwp3SneKZ0p3ymeKZ0p3infKZ4p4CmfKZ4p3yngKZ8p4SmgKZ8p4CnhKaAp4imhKaAp4SniKaEp4ymiKaEp4injKaIp5CmjKaIp4ynkKaQp5imlKaQp5SnmKaUp5ymmKaUp5innKaYp6CmnKaYp5ynoKacp6SmoKacp6CnpKagp6impKagp6SnqKakp6ymqKakp6inrKaop7CmrKaop6ynsKasp7SmsKasp7CntKawp7imtKawp7SnuKa0p7ymuKa0p7invKa4p8CmvKa4p7ynwKa8p8SmwKa8p8CnxKbAp8imxKbAp8SnyKbEp8ymyKbEp8inzKbIp9CmzKbIp8yn0KbMp9Sm0KbMp9Cn1KbQp9im1KbQp9Sn2KbUp9ym2KbUp9in3KbYp+Cm3KbYp9yn4Kbcp+Sm4Kbcp+Cn5Kbgp+im5Kbgp+Sn6Kbkp+ym6Kbkp+in7Kbop/Cm7Kbop+yn8Kbsp/Sm8Kbsp/Cn9Kbwp/im9Kbwp/Sn+Kb0p/ym+Kb0p/in/Kb4pACq/Kb4p/ykAKr8pASrAKb8pACoBKsApAirBKcApASoCKsEpAyrCKcEpAioDKsIpBCrDKcIpAyoEKsMpBSrEKcMpBCoFKsQpBirFKcQpBSoGKsUpByrGKcUpBioHKsYpCCrHKcYpByoIKscpCSrIKccpCCoJKsgpCirJKcgpCSoKKskpCyrKKckpCioLKsopDCrLKcopCyoMKsspDSrMKcspDCoNKswpDirNKcwpDSoOKs0pDyrOKc0pDioPKs4pECrPKc4pDyoQKs8pESrQKc8pECoRKtApEirRKdApESoSKtEpEyrSKdEpEioTKtIpFCrTKdIpEyoUKtMpFSrUKdMpFCoVKtQpFirVKdQpFSoWKtUpFyrWKdUpFioXKtYpGCrXKdYpFyoYKtcpGSrYKdcpGCoZKtgpGirZKdgpGSoaKtkpGyraKdkpGiobKtopHCrbKdopGyocKtspHSrcKdspHCodKtwpHirdKdwpHSoeKt0pHyreKd0pHiofKt4pICrfKd4pHyogKt8pISrgKd8pICohKuApIirhKeApISoiKuEpIyriKeEpIiojKuIpJCrjKeIpIyokKuMpJSrkKeMpJColKuUpJyrmKeUpJionKuYpKCrnKeYpJyooKucpKSroKecpKCopKugpKirpKegpKSoqKukpKyrqKekpKiorKuopLCrrKeopKyosKuspLSrsKespLCotKuwpLirtKewpLSouKu0pLyruKe0pLiovKu4pMCrvKe4pLyowKu8pMSrwKe8pMCoxKvApMirxKfApMSoyKvEpMyryKfEpMiozKvIpNCrzKfIpMyo0KvMpNSr0KfMpNCo1KvQpNir1KfQpNSo2KvUpNyr2KfUpNio3KvYpOCr3KfYpNyo4KvcpOSr4KfcpOCo5KvgpOir5KfgpOSo6KvkpOyr6KfkpOio7KvopPCr7KfopOyo8KvspPSr8KfspPCo9KvwpPir9KfwpPSo+Kv0pPyr+Kf0pPio/Kv4pQCr/Kf4pPypAKv8pQSoAKv8pQCpBKgAqQioBKgAqQSpCKgEqQyoCKgEqQipDKgIqRCoDKgIqQypEKgMqRSoEKgMqRCpFKgQqRioFKgQqRSpGKgUqRyoGKgUqRipHKgYqSCoHKgYqRypIKgcqSSoIKgcqSCpJKggqSioJKggqSSpKKgkqSyoKKgkqSipLKgoqTCoLKgoqSypMKgsqTSoMKgsqTCpNKgwqTioNKgwqTSpOKg0qTyoOKg0qTipPKg4qUCoPKg4qTypQKg8qUSoQKg8qUCpRKhAqUioRKhAqUSpSKhEqUyoSKhEqUipTKhIqVCoTKhIqUypUKhMqVSoUKhMqVCpVKhQqVioVKhQqVSpWKhUqVyoWKhUqVipXKhYqWCoXKhYqVypYKhcqWSoYKhcqWCpZKhgqWioZKhgqWSpaKhkqWyoaKhkqWipbKhoqXCobKhoqWypcKhsqXSocKhsqXCpdKhwqXiodKhwqXSpeKh0qXyoeKh0qXipfKh4qYCofKh4qXypgKh8qYSogKh8qYCphKiAqYiohKiAqYSpiKiEqYyoiKiEqYipjKiIqZCojKiIqYypkKiMqZSokKiMqZCplKiQqZiolKiQqZSpmKiYqaConKiYqZypoKicqaSooKicqaCppKigqaiopKigqaSpqKikqayoqKikqaiprKioqbCorKioqaypsKisqbSosKisqbCptKiwqbiotKiwqbSpuKi0qbyouKi0qbipvKi4qcCovKi4qbypwKi8qcSowKi8qcCpxKjAqcioxKjAqcSpyKjEqcyoyKjEqcipzKjIqdCozKjIqcyp0KjMqdSo0KjMqdCp1KjQqdio1KjQqdSp2KjUqdyo2KjUqdip3KjYqeCo3KjYqdyp4KjcqeSo4KjcqeCp5Kjgqeio5KjgqeSp6Kjkqeyo6Kjkqeip7KjoqfCo7Kjoqeyp8KjsqfSo8KjsqfCp9Kjwqfio9KjwqfSp+Kj0qfyo+Kj0qfip/Kj4qgCo/Kj4qfyqAKj8qgSpAKj8qgCqBKkAqgipBKkAqgSqCKkEqgypCKkEqgiqDKkIqhCpDKkIqgyqEKkMqhSpEKkMqhCqFKkQqhipFKkQqhSqGKkUqhypGKkUqhiqHKkYqiCpHKkYqhyqIKkcqiSpIKkcqiCqJKkgqiipJKkgqiSqKKkkqiypKKkkqiiqLKkoqjCpLKkoqiyqMKksqjSpMKksqjCqNKkwqjipNKkwqjSqOKk0qjypOKk0qjiqPKk4qkCpPKk4qjyqQKk8qkSpQKk8qkCqRKlAqkipRKlAqkSqSKlEqkypSKlEqkiqTKlIqlCpTKlIqkyqUKlMqlSpUKlMqlCqVKlQqlipVKlQqlSqWKlUqlypWKlUqliqXKlYqmCpXKlYqlyqYKlcqmSpYKlcqmCqZKlgqmipZKlgqmSqaKlkqmypaKlkqmiqbKloqnCpbKloqmyqcKlsqnSpcKlsqnCqdKlwqnipdKlwqnSqeKl0qnypeKl0qniqfKl4qoCpfKl4qnyqgKl8qoSpgKl8qoCqhKmAqoiphKmAqoSqiKmEqoypiKmEqoiqjKmIqpCpjKmIqoyqkKmMqpSpkKmMqpCqlKmQqpiplKmQqpSqmKmUqpypmKmUqpiqnKmcqqSpoKmcqqCqpKmgqqippKmgqqSqqKmkqqypqKmkqqiqrKmoqrCprKmoqqyqsKmsqrSpsKmsqrCqtKmwqriptKmwqrSquKm0qrypuKm0qriqvKm4qsCpvKm4qryqwKm8qsSpwKm8qsCqxKnAqsipxKnAqsSqyKnEqsypyKnEqsiqzKnIqtCpzKnIqsyq0KnMqtSp0KnMqtCq1KnQqtip1KnQqtSq2KnUqtyp2KnUqtiq3KnYquCp3KnYqtyq4KncquSp4KncquCq5Kngquip5KngquSq6Knkquyp6Knkquiq7KnoqvCp7Knoquyq8KnsqvSp8KnsqvCq9Knwqvip9KnwqvSq+Kn0qvyp+Kn0qviq/Kn4qwCp/Kn4qvyrAKn8qwSqAKn8qwCrBKoAqwiqBKoAqwSrCKoEqwyqCKoEqwirDKoIqxCqDKoIqwyrEKoMqxSqEKoMqxCrFKoQqxiqFKoQqxSrGKoUqxyqGKoUqxirHKoYqyCqHKoYqxyrIKocqySqIKocqyCrJKogqyiqJKogqySrKKokqyyqKKokqyirLKooqzCqLKooqyyrMKosqzSqMKosqzCrNKowqziqNKowqzSrOKo0qzyqOKo0qzirPKo4q0CqPKo4qzyrQKo8q0SqQKo8q0CrRKpAq0iqRKpAq0SrSKpEq0yqSKpEq0irTKpIq1CqTKpIq0yrUKpMq1SqUKpMq1CrVKpQq1iqVKpQq1SrWKpUq1yqWKpUq1irXKpYq2CqXKpYq1yrYKpcq2SqYKpcq2CrZKpgq2iqZKpgq2SraKpkq2yqaKpkq2irbKpoq3CqbKpoq2yrcKpsq3SqcKpsq3CrdKpwq3iqdKpwq3SreKp0q3yqeKp0q3irfKp4q4CqfKp4q3yrgKp8q4SqgKp8q4CrhKqAq4iqhKqAq4SriKqEq4yqiKqEq4irjKqIq5CqjKqIq4yrkKqMq5SqkKqMq5CrlKqQq5iqlKqQq5SrmKqUq5yqmKqUq5irnKqYq6CqnKqYq5yroKqgq6iqpKqgq6SrqKqkq6yqqKqkq6irrKqoq7CqrKqoq6yrsKqsq7SqsKqsq7CrtKqwq7iqtKqwq7SruKq0q7yquKq0q7irvKq4q8CqvKq4q7yrwKq8q8SqwKq8q8CrxKrAq8iqxKrAq8SryKrEq8yqyKrEq8irzKrIq9CqzKrIq8yr0KrMq9Sq0KrMq9Cr1KrQq9iq1KrQq9Sr2KrUq9yq2KrUq9ir3KrYq+Cq3KrYq9yr4Krcq+Sq4Krcq+Cr5Krgq+iq5Krgq+Sr6Krkq+yq6Krkq+ir7Kroq/Cq7Kroq+yr8Krsq/Sq8Krsq/Cr9Krwq/iq9Krwq/Sr+Kr0q/yq+Kr0q/ir/Kr4qACu/Kr4q/yoAK78qASvAKr8qACsBK8AqAivBKsAqASsCK8EqAyvCKsEqAisDK8IqBCvDKsIqAysEK8MqBSvEKsMqBCsFK8QqBivFKsQqBSsGK8UqByvGKsUqBisHK8YqCCvHKsYqBysIK8cqCSvIKscqCCsJK8gqCivJKsgqCSsKK8kqCyvKKskqCisLK8oqDCvLKsoqCysMK8sqDSvMKssqDCsNK8wqDivNKswqDSsOK80qDyvOKs0qDisPK84qECvPKs4qDysQK88qESvQKs8qECsRK9AqEivRKtAqESsSK9EqEyvSKtEqEisTK9IqFCvTKtIqEysUK9MqFSvUKtMqFCsVK9QqFivVKtQqFSsWK9UqFyvWKtUqFisXK9YqGCvXKtYqFysYK9cqGSvYKtcqGCsZK9gqGivZKtgqGSsaK9kqGyvaKtkqGisbK9oqHCvbKtoqGyscK9sqHSvcKtsqHCsdK9wqHivdKtwqHSseK90qHyveKt0qHisfK94qICvfKt4qHysgK98qISvgKt8qICshK+AqIivhKuAqISsiK+EqIyviKuEqIisjK+IqJCvjKuIqIyskK+MqJSvkKuMqJCslK+QqJivlKuQqJSsmK+UqJyvmKuUqJisnK+YqKCvnKuYqJysoK+cqKSvoKucqKCspK+kqKyvqKukqKisrK+oqLCvrKuoqKyssK+sqLSvsKusqLCstK+wqLivtKuwqLSsuK+0qLyvuKu0qLisvK+4qMCvvKu4qLyswK+8qMSvwKu8qMCsxK/AqMivxKvAqMSsyK/EqMyvyKvEqMiszK/IqNCvzKvIqMys0K/MqNSv0KvMqNCs1K/QqNiv1KvQqNSs2K/UqNyv2KvUqNis3K/YqOCv3KvYqNys4K/cqOSv4KvcqOCs5K/gqOiv5KvgqOSs6K/kqOyv6KvkqOis7K/oqPCv7KvoqOys8K/sqPSv8KvsqPCs9K/wqPiv9KvwqPSs+K/0qPyv+Kv0qPis/K/4qQCv/Kv4qPytAK/8qQSsAK/8qQCtBKwArQisBKwArQStCKwErQysCKwErQitDKwIrRCsDKwIrQytEKwMrRSsEKwMrRCtFKwQrRisFKwQrRStGKwUrRysGKwUrRitHKwYrSCsHKwYrRytIKwcrSSsIKwcrSCtJKwgrSisJKwgrSStKKwkrSysKKwkrSitLKworTCsLKworSytMKwsrTSsMKwsrTCtNKwwrTisNKwwrTStOKw0rTysOKw0rTitPKw4rUCsPKw4rTytQKw8rUSsQKw8rUCtRKxArUisRKxArUStSKxErUysSKxErUitTKxIrVCsTKxIrUytUKxMrVSsUKxMrVCtVKxQrVisVKxQrVStWKxUrVysWKxUrVitXKxYrWCsXKxYrVytYKxcrWSsYKxcrWCtZKxgrWisZKxgrWStaKxkrWysaKxkrWitbKxorXCsbKxorWytcKxsrXSscKxsrXCtdKxwrXisdKxwrXSteKx0rXyseKx0rXitfKx4rYCsfKx4rXytgKx8rYSsgKx8rYCthKyArYishKyArYStiKyErYysiKyErYitjKyIrZCsjKyIrYytkKyMrZSskKyMrZCtlKyQrZislKyQrZStmKyUrZysmKyUrZitnKyYraCsnKyYrZytoKycraSsoKycraCtpKygraispKygraStqKyorbCsrKyoraytsKysrbSssKysrbCttKywrbistKywrbStuKy0rbysuKy0rbitvKy4rcCsvKy4rbytwKy8rcSswKy8rcCtxKzArcisxKzArcStyKzErcysyKzErcitzKzIrdCszKzIrcyt0KzMrdSs0KzMrdCt1KzQrdis1KzQrdSt2KzUrdys2KzUrdit3KzYreCs3KzYrdyt4KzcreSs4KzcreCt5Kzgreis5KzgreSt6Kzkreys6Kzkreit7KzorfCs7Kzoreyt8KzsrfSs8KzsrfCt9Kzwrfis9KzwrfSt+Kz0rfys+Kz0rfit/Kz4rgCs/Kz4rfyuAKz8rgStAKz8rgCuBK0ArgitBK0ArgSuCK0ErgytCK0ErgiuDK0IrhCtDK0IrgyuEK0MrhStEK0MrhCuFK0QrhitFK0QrhSuGK0UrhytGK0UrhiuHK0YriCtHK0YrhyuIK0criStIK0criCuJK0griitJK0griSuKK0kriytKK0kriiuLK0orjCtLK0oriyuMK0srjStMK0srjCuNK0wrjitNK0wrjSuOK00rjytOK00rjiuPK04rkCtPK04rjyuQK08rkStQK08rkCuRK1ArkitRK1ArkSuSK1ErkytSK1ErkiuTK1IrlCtTK1IrkyuUK1MrlStUK1MrlCuVK1QrlitVK1QrlSuWK1UrlytWK1UrliuXK1YrmCtXK1YrlyuYK1crmStYK1crmCuZK1grmitZK1grmSuaK1krmytaK1krmiubK1ornCtbK1ormyucK1srnStcK1srnCudK1wrnitdK1wrnSueK10rnyteK10rniufK14roCtfK14rnyugK18roStgK18roCuhK2AroithK2AroSuiK2EroytiK2EroiujK2IrpCtjK2IroyukK2MrpStkK2MrpCulK2QrpitlK2QrpSumK2UrpytmK2UrpiunK2YrqCtnK2YrpyuoK2crqStoK2crqCupK2grqitpK2grqSuqK2krqytqK2krqiurK2srrStsK2srrCutK2wrrittK2wrrSuuK20rrytuK20rriuvK24rsCtvK24rryuwK28rsStwK28rsCuxK3ArsitxK3ArsSuyK3ErsytyK3ErsiuzK3IrtCtzK3Irsyu0K3MrtSt0K3MrtCu1K3Qrtit1K3QrtSu2K3Urtyt2K3Urtiu3K3YruCt3K3Yrtyu4K3cruSt4K3cruCu5K3gruit5K3gruSu6K3kruyt6K3kruiu7K3orvCt7K3oruyu8K3srvSt8K3srvCu9K3wrvit9K3wrvSu+K30rvyt+K30rviu/K34rwCt/K34rvyvAK38rwSuAK38rwCvBK4ArwiuBK4ArwSvCK4ErwyuCK4ErwivDK4IrxCuDK4IrwyvEK4MrxSuEK4MrxCvFK4QrxiuFK4QrxSvGK4UrxyuGK4UrxivHK4YryCuHK4YrxyvIK4crySuIK4cryCvJK4gryiuJK4grySvKK4kryyuKK4kryivLK4orzCuLK4oryyvMK4srzSuMK4srzCvNK4wrziuNK4wrzSvOK40rzyuOK40rzivPK44r0CuPK44rzyvQK48r0SuQK48r0CvRK5Ar0iuRK5Ar0SvSK5Er0yuSK5Er0ivTK5Ir1CuTK5Ir0yvUK5Mr1SuUK5Mr1CvVK5Qr1iuVK5Qr1SvWK5Ur1yuWK5Ur1ivXK5Yr2CuXK5Yr1yvYK5cr2SuYK5cr2CvZK5gr2iuZK5gr2SvaK5kr2yuaK5kr2ivbK5or3CubK5or2yvcK5sr3SucK5sr3CvdK5wr3iudK5wr3SveK50r3yueK50r3ivfK54r4CufK54r3yvgK58r4SugK58r4CvhK6Ar4iuhK6Ar4SviK6Er4yuiK6Er4ivjK6Ir5CujK6Ir4yvkK6Mr5SukK6Mr5CvlK6Qr5iulK6Qr5SvmK6Ur5yumK6Ur5ivnK6Yr6CunK6Yr5yvoK6cr6SuoK6cr6CvpK6gr6iupK6gr6SvqK6kr6yuqK6kr6ivrK6or7CurK6or6yvsK6wr7iutK6wr7SvuK60r7yuuK60r7ivvK64r8CuvK64r7yvwK68r8SuwK68r8CvxK7Ar8iuxK7Ar8SvyK7Er8yuyK7Er8ivzK7Ir9CuzK7Ir8yv0K7Mr9Su0K7Mr9Cv1K7Qr9iu1K7Qr9Sv2K7Ur9yu2K7Ur9iv3K7Yr+Cu3K7Yr9yv4K7cr+Su4K7cr+Cv5K7gr+iu5K7gr+Sv6K7kr+yu6K7kr+iv7K7or/Cu7K7or+yv8K7sr/Su8K7sr/Cv9K7wr/iu9K7wr/Sv+K70r/yu+K70r/iv/K74rACy/K74r/ysALL8rASzAK78rACwBLMArAizBK8ArASwCLMErAyzCK8ErAiwDLMIrBCzDK8IrAywELMMrBSzEK8MrBCwFLMQrBizFK8QrBSwGLMUrByzGK8UrBiwHLMYrCCzHK8YrBywILMcrCSzIK8crCCwJLMgrCizJK8grCSwKLMkrCyzKK8krCiwLLMorDCzLK8orCywMLMsrDSzMK8srDCwNLMwrDizNK8wrDSwOLM0rDyzOK80rDiwPLM4rECzPK84rDywQLM8rESzQK88rECwRLNArEizRK9ArESwSLNErEyzSK9ErEiwTLNIrFCzTK9IrEywULNMrFSzUK9MrFCwVLNQrFizVK9QrFSwWLNUrFyzWK9UrFiwXLNYrGCzXK9YrFywYLNcrGSzYK9crGCwZLNgrGizZK9grGSwaLNkrGyzaK9krGiwbLNorHCzbK9orGywcLNsrHSzcK9srHCwdLNwrHizdK9wrHSweLN0rHyzeK90rHiwfLN4rICzfK94rHywgLN8rISzgK98rICwhLOArIizhK+ArISwiLOErIyziK+ErIiwjLOIrJCzjK+IrIywkLOMrJSzkK+MrJCwlLOQrJizlK+QrJSwmLOUrJyzmK+UrJiwnLOYrKCznK+YrJywoLOcrKSzoK+crKCwpLOgrKizpK+grKSwqLOkrKyzqK+krKiwrLOorLCzrK+orKywsLOsrLSzsK+srLCwtLO0rLyzuK+0rLiwvLO4rMCzvK+4rLywwLO8rMSzwK+8rMCwxLPArMizxK/ArMSwyLPErMyzyK/ErMiwzLPIrNCzzK/IrMyw0LPMrNSz0K/MrNCw1LPQrNiz1K/QrNSw2LPUrNyz2K/UrNiw3LPYrOCz3K/YrNyw4LPcrOSz4K/crOCw5LPgrOiz5K/grOSw6LPkrOyz6K/krOiw7LPorPCz7K/orOyw8LPsrPSz8K/srPCw9LPwrPiz9K/wrPSw+LP0rPyz+K/0rPiw/LP4rQCz/K/4rPyxALP8rQSwALP8rQCxBLAAsQiwBLAAsQSxCLAEsQywCLAEsQixDLAIsRCwDLAIsQyxELAMsRSwELAMsRCxFLAQsRiwFLAQsRSxGLAUsRywGLAUsRixHLAYsSCwHLAYsRyxILAcsSSwILAcsSCxJLAgsSiwJLAgsSSxKLAksSywKLAksSixLLAosTCwLLAosSyxMLAssTSwMLAssTCxNLAwsTiwNLAwsTSxOLA0sTywOLA0sTixPLA4sUCwPLA4sTyxQLA8sUSwQLA8sUCxRLBAsUiwRLBAsUSxSLBEsUywSLBEsUixTLBIsVCwTLBIsUyxULBMsVSwULBMsVCxVLBQsViwVLBQsVSxWLBUsVywWLBUsVixXLBYsWCwXLBYsVyxYLBcsWSwYLBcsWCxZLBgsWiwZLBgsWSxaLBksWywaLBksWixbLBosXCwbLBosWyxcLBssXSwcLBssXCxdLBwsXiwdLBwsXSxeLB0sXyweLB0sXixfLB4sYCwfLB4sXyxgLB8sYSwgLB8sYCxhLCAsYiwhLCAsYSxiLCEsYywiLCEsYixjLCIsZCwjLCIsYyxkLCMsZSwkLCMsZCxlLCQsZiwlLCQsZSxmLCUsZywmLCUsZixnLCYsaCwnLCYsZyxoLCcsaSwoLCcsaCxpLCgsaiwpLCgsaSxqLCksaywqLCksaixrLCosbCwrLCosayxsLCssbSwsLCssbCxtLCwsbiwtLCwsbSxuLC4scCwvLC4sbyxwLC8scSwwLC8scCxxLDAsciwxLDAscSxyLDEscywyLDEscixzLDIsdCwzLDIscyx0LDMsdSw0LDMsdCx1LDQsdiw1LDQsdSx2LDUsdyw2LDUsdix3LDYseCw3LDYsdyx4LDcseSw4LDcseCx5LDgseiw5LDgseSx6LDkseyw6LDkseix7LDosfCw7LDoseyx8LDssfSw8LDssfCx9LDwsfiw9LDwsfSx+LD0sfyw+LD0sfix/LD4sgCw/LD4sfyyALD8sgSxALD8sgCyBLEAsgixBLEAsgSyCLEEsgyxCLEEsgiyDLEIshCxDLEIsgyyELEMshSxELEMshCyFLEQshixFLEQshSyGLEUshyxGLEUshiyHLEYsiCxHLEYshyyILEcsiSxILEcsiCyJLEgsiixJLEgsiSyKLEksiyxKLEksiiyLLEosjCxLLEosiyyMLEssjSxMLEssjCyNLEwsjixNLEwsjSyOLE0sjyxOLE0sjiyPLE4skCxPLE4sjyyQLE8skSxQLE8skCyRLFAskixRLFAskSySLFEskyxSLFEskiyTLFIslCxTLFIskyyULFMslSxULFMslCyVLFQslixVLFQslSyWLFUslyxWLFUsliyXLFYsmCxXLFYslyyYLFcsmSxYLFcsmCyZLFgsmixZLFgsmSyaLFksmyxaLFksmiybLFosnCxbLFosmyycLFssnSxcLFssnCydLFwsnixdLFwsnSyeLF0snyxeLF0sniyfLF4soCxfLF4snyygLF8soSxgLF8soCyhLGAsoixhLGAsoSyiLGEsoyxiLGEsoiyjLGIspCxjLGIsoyykLGMspSxkLGMspCylLGQspixlLGQspSymLGUspyxmLGUspiynLGYsqCxnLGYspyyoLGcsqSxoLGcsqCypLGgsqixpLGgsqSyqLGksqyxqLGksqiyrLGosrCxrLGosqyysLGssrSxsLGssrCytLGwsrixtLGwsrSyuLG0sryxuLG0sriyvLG8ssSxwLG8ssCyxLHAssixxLHAssSyyLHEssyxyLHEssiyzLHIstCxzLHIssyy0LHMstSx0LHMstCy1LHQstix1LHQstSy2LHUstyx2LHUstiy3LHYsuCx3LHYstyy4LHcsuSx4LHcsuCy5LHgsuix5LHgsuSy6LHksuyx6LHksuiy7LHosvCx7LHosuyy8LHssvSx8LHssvCy9LHwsvix9LHwsvSy+LH0svyx+LH0sviy/LH4swCx/LH4svyzALH8swSyALH8swCzBLIAswiyBLIAswSzCLIEswyyCLIEswizDLIIsxCyDLIIswyzELIMsxSyELIMsxCzFLIQsxiyFLIQsxSzGLIUsxyyGLIUsxizHLIYsyCyHLIYsxyzILIcsySyILIcsyCzJLIgsyiyJLIgsySzKLIksyyyKLIksyizLLIoszCyLLIosyyzMLIsszSyMLIsszCzNLIwsziyNLIwszSzOLI0szyyOLI0szizPLI4s0CyPLI4szyzQLI8s0SyQLI8s0CzRLJAs0iyRLJAs0SzSLJEs0yySLJEs0izTLJIs1CyTLJIs0yzULJMs1SyULJMs1CzVLJQs1iyVLJQs1SzWLJUs1yyWLJUs1izXLJYs2CyXLJYs1yzYLJcs2SyYLJcs2CzZLJgs2iyZLJgs2SzaLJks2yyaLJks2izbLJos3CybLJos2yzcLJss3SycLJss3CzdLJws3iydLJws3SzeLJ0s3yyeLJ0s3izfLJ4s4CyfLJ4s3yzgLJ8s4SygLJ8s4CzhLKAs4iyhLKAs4SziLKEs4yyiLKEs4izjLKIs5CyjLKIs4yzkLKMs5SykLKMs5CzlLKQs5iylLKQs5SzmLKUs5yymLKUs5iznLKYs6CynLKYs5yzoLKcs6SyoLKcs6CzpLKgs6iypLKgs6SzqLKks6yyqLKks6izrLKos7CyrLKos6yzsLKss7SysLKss7CztLKws7iytLKws7SzuLK0s7yyuLK0s7izvLK4s8CyvLK4s7yzwLLAs8iyxLLAs8SzyLLEs8yyyLLEs8izzLLIs9CyzLLIs8yz0LLMs9Sy0LLMs9Cz1LLQs9iy1LLQs9Sz2LLUs9yy2LLUs9iz3LLYs+Cy3LLYs9yz4LLcs+Sy4LLcs+Cz5LLgs+iy5LLgs+Sz6LLks+yy6LLks+iz7LLos/Cy7LLos+yz8LLss/Sy8LLss/Cz9LLws/iy9LLws/Sz+LL0s/yy+LL0s/iz/LL4sAC2/LL4s/ywALb8sAS3ALL8sAC0BLcAsAi3BLMAsAS0CLcEsAy3CLMEsAi0DLcIsBC3DLMIsAy0ELcMsBS3ELMMsBC0FLcQsBi3FLMQsBS0GLcUsBy3GLMUsBi0HLcYsCC3HLMYsBy0ILccsCS3ILMcsCC0JLcgsCi3JLMgsCS0KLcksCy3KLMksCi0LLcosDC3LLMosCy0MLcssDS3MLMssDC0NLcwsDi3NLMwsDS0OLc0sDy3OLM0sDi0PLc4sEC3PLM4sDy0QLc8sES3QLM8sEC0RLdAsEi3RLNAsES0SLdEsEy3SLNEsEi0TLdIsFC3TLNIsEy0ULdMsFS3ULNMsFC0VLdQsFi3VLNQsFS0WLdUsFy3WLNUsFi0XLdYsGC3XLNYsFy0YLdcsGS3YLNcsGC0ZLdgsGi3ZLNgsGS0aLdksGy3aLNksGi0bLdosHC3bLNosGy0cLdssHS3cLNssHC0dLdwsHi3dLNwsHS0eLd0sHy3eLN0sHi0fLd4sIC3fLN4sHy0gLd8sIS3gLN8sIC0hLeAsIi3hLOAsIS0iLeEsIy3iLOEsIi0jLeIsJC3jLOIsIy0kLeMsJS3kLOMsJC0lLeQsJi3lLOQsJS0mLeUsJy3mLOUsJi0nLeYsKC3nLOYsJy0oLecsKS3oLOcsKC0pLegsKi3pLOgsKS0qLeksKy3qLOksKi0rLeosLC3rLOosKy0sLessLS3sLOssLC0tLewsLi3tLOwsLS0uLe0sLy3uLO0sLi0vLe4sMC3vLO4sLy0wLe8sMS3wLO8sMC0xLfEsMy3yLPEsMi0zLfIsNC3zLPIsMy00LfMsNS30LPMsNC01LfQsNi31LPQsNS02LfUsNy32LPUsNi03LfYsOC33LPYsNy04LfcsOS34LPcsOC05LfgsOi35LPgsOS06LfksOy36LPksOi07LfosPC37LPosOy08LfssPS38LPssPC09LfwsPi39LPwsPS0+Lf0sPy3+LP0sPi0/Lf4sQC3/LP4sPy1ALf8sQS0ALf8sQC1BLQAtQi0BLQAtQS1CLQEtQy0CLQEtQi1DLQItRC0DLQItQy1ELQMtRS0ELQMtRC1FLQQtRi0FLQQtRS1GLQUtRy0GLQUtRi1HLQYtSC0HLQYtRy1ILQctSS0ILQctSC1JLQgtSi0JLQgtSS1KLQktSy0KLQktSi1LLQotTC0LLQotSy1MLQstTS0MLQstTC1NLQwtTi0NLQwtTS1OLQ0tTy0OLQ0tTi1PLQ4tUC0PLQ4tTy1QLQ8tUS0QLQ8tUC1RLRAtUi0RLRAtUS1SLREtUy0SLREtUi1TLRItVC0TLRItUy1ULRMtVS0ULRMtVC1VLRQtVi0VLRQtVS1WLRUtVy0WLRUtVi1XLRYtWC0XLRYtVy1YLRctWS0YLRctWC1ZLRgtWi0ZLRgtWS1aLRktWy0aLRktWi1bLRotXC0bLRotWy1cLRstXS0cLRstXC1dLRwtXi0dLRwtXS1eLR0tXy0eLR0tXi1fLR4tYC0fLR4tXy1gLR8tYS0gLR8tYC1hLSAtYi0hLSAtYS1iLSEtYy0iLSEtYi1jLSItZC0jLSItYy1kLSMtZS0kLSMtZC1lLSQtZi0lLSQtZS1mLSUtZy0mLSUtZi1nLSYtaC0nLSYtZy1oLSctaS0oLSctaC1pLSgtai0pLSgtaS1qLSktay0qLSktai1rLSotbC0rLSotay1sLSstbS0sLSstbC1tLSwtbi0tLSwtbS1uLS0tby0uLS0tbi1vLS4tcC0vLS4tby1wLS8tcS0wLS8tcC1xLTAtci0xLTAtcS1yLTItdC0zLTItcy10LTMtdS00LTMtdC11LTQtdi01LTQtdS12LTUtdy02LTUtdi13LTYteC03LTYtdy14LTcteS04LTcteC15LTgtei05LTgteS16LTktey06LTktei17LTotfC07LTotey18LTstfS08LTstfC19LTwtfi09LTwtfS1+LT0tfy0+LT0tfi1/LT4tgC0/LT4tfy2ALT8tgS1ALT8tgC2BLUAtgi1BLUAtgS2CLUEtgy1CLUEtgi2DLUIthC1DLUItgy2ELUMthS1ELUMthC2FLUQthi1FLUQthS2GLUUthy1GLUUthi2HLUYtiC1HLUYthy2ILUctiS1ILUctiC2JLUgtii1JLUgtiS2KLUktiy1KLUktii2LLUotjC1LLUotiy2MLUstjS1MLUstjC2NLUwtji1NLUwtjS2OLU0tjy1OLU0tji2PLU4tkC1PLU4tjy2QLU8tkS1QLU8tkC2RLVAtki1RLVAtkS2SLVEtky1SLVEtki2TLVItlC1TLVItky2ULVMtlS1ULVMtlC2VLVQtli1VLVQtlS2WLVUtly1WLVUtli2XLVYtmC1XLVYtly2YLVctmS1YLVctmC2ZLVgtmi1ZLVgtmS2aLVktmy1aLVktmi2bLVotnC1bLVotmy2cLVstnS1cLVstnC2dLVwtni1dLVwtnS2eLV0tny1eLV0tni2fLV4toC1fLV4tny2gLV8toS1gLV8toC2hLWAtoi1hLWAtoS2iLWEtoy1iLWEtoi2jLWItpC1jLWItoy2kLWMtpS1kLWMtpC2lLWQtpi1lLWQtpS2mLWUtpy1mLWUtpi2nLWYtqC1nLWYtpy2oLWctqS1oLWctqC2pLWgtqi1pLWgtqS2qLWktqy1qLWktqi2rLWotrC1rLWotqy2sLWstrS1sLWstrC2tLWwtri1tLWwtrS2uLW0try1uLW0tri2vLW4tsC1vLW4try2wLW8tsS1wLW8tsC2xLXAtsi1xLXAtsS2yLXEtsy1yLXEtsi2zLXMttS10LXMttC21LXQtti11LXQttS22LXUtty12LXUtti23LXYtuC13LXYtty24LXctuS14LXctuC25LXgtui15LXgtuS26LXktuy16LXktui27LXotvC17LXotuy28LXstvS18LXstvC29LXwtvi19LXwtvS2+LX0tvy1+LX0tvi2/LX4twC1/LX4tvy3ALX8twS2ALX8twC3BLYAtwi2BLYAtwS3CLYEtwy2CLYEtwi3DLYItxC2DLYItwy3ELYMtxS2ELYMtxC3FLYQtxi2FLYQtxS3GLYUtxy2GLYUtxi3HLYYtyC2HLYYtxy3ILYctyS2ILYctyC3JLYgtyi2JLYgtyS3KLYktyy2KLYktyi3LLYotzC2LLYotyy3MLYstzS2MLYstzC3NLYwtzi2NLYwtzS3OLY0tzy2OLY0tzi3PLY4t0C2PLY4tzy3QLY8t0S2QLY8t0C3RLZAt0i2RLZAt0S3SLZEt0y2SLZEt0i3TLZIt1C2TLZIt0y3ULZMt1S2ULZMt1C3VLZQt1i2VLZQt1S3WLZUt1y2WLZUt1i3XLZYt2C2XLZYt1y3YLZct2S2YLZct2C3ZLZgt2i2ZLZgt2S3aLZkt2y2aLZkt2i3bLZot3C2bLZot2y3cLZst3S2cLZst3C3dLZwt3i2dLZwt3S3eLZ0t3y2eLZ0t3i3fLZ4t4C2fLZ4t3y3gLZ8t4S2gLZ8t4C3hLaAt4i2hLaAt4S3iLaEt4y2iLaEt4i3jLaIt5C2jLaIt4y3kLaMt5S2kLaMt5C3lLaQt5i2lLaQt5S3mLaUt5y2mLaUt5i3nLaYt6C2nLaYt5y3oLact6S2oLact6C3pLagt6i2pLagt6S3qLakt6y2qLakt6i3rLaot7C2rLaot6y3sLast7S2sLast7C3tLawt7i2tLawt7S3uLa0t7y2uLa0t7i3vLa4t8C2vLa4t7y3wLa8t8S2wLa8t8C3xLbAt8i2xLbAt8S3yLbEt8y2yLbEt8i3zLbIt9C2zLbIt8y30LbQt9i21LbQt9S32LbUt9y22LbUt9i33LbYt+C23LbYt9y34Lbct+S24Lbct+C35Lbgt+i25Lbgt+S36Lbkt+y26Lbkt+i37Lbot/C27Lbot+y38Lbst/S28Lbst/C39Lbwt/i29Lbwt/S3+Lb0t/y2+Lb0t/i3/Lb4tAC6/Lb4t/y0ALr8tAS7ALb8tAC4BLsAtAi7BLcAtAS4CLsEtAy7CLcEtAi4DLsItBC7DLcItAy4ELsMtBS7ELcMtBC4FLsQtBi7FLcQtBS4GLsUtBy7GLcUtBi4HLsYtCC7HLcYtBy4ILsctCS7ILcctCC4JLsgtCi7JLcgtCS4KLsktCy7KLcktCi4LLsotDC7LLcotCy4MLsstDS7MLcstDC4NLswtDi7NLcwtDS4OLs0tDy7OLc0tDi4PLs4tEC7PLc4tDy4QLs8tES7QLc8tEC4RLtAtEi7RLdAtES4SLtEtEy7SLdEtEi4TLtItFC7TLdItEy4ULtMtFS7ULdMtFC4VLtQtFi7VLdQtFS4WLtUtFy7WLdUtFi4XLtYtGC7XLdYtFy4YLtctGS7YLdctGC4ZLtgtGi7ZLdgtGS4aLtktGy7aLdktGi4bLtotHC7bLdotGy4cLtstHS7cLdstHC4dLtwtHi7dLdwtHS4eLt0tHy7eLd0tHi4fLt4tIC7fLd4tHy4gLt8tIS7gLd8tIC4hLuAtIi7hLeAtIS4iLuEtIy7iLeEtIi4jLuItJC7jLeItIy4kLuMtJS7kLeMtJC4lLuQtJi7lLeQtJS4mLuUtJy7mLeUtJi4nLuYtKC7nLeYtJy4oLuctKS7oLectKC4pLugtKi7pLegtKS4qLuktKy7qLektKi4rLuotLC7rLeotKy4sLustLS7sLestLC4tLuwtLi7tLewtLS4uLu0tLy7uLe0tLi4vLu4tMC7vLe4tLy4wLu8tMS7wLe8tMC4xLvAtMi7xLfAtMS4yLvEtMy7yLfEtMi4zLvItNC7zLfItMy40LvMtNS70LfMtNC41LvUtNy72LfUtNi43LvYtOC73LfYtNy44LvctOS74LfctOC45LvgtOi75LfgtOS46LvktOy76LfktOi47LvotPC77LfotOy48LvstPS78LfstPC49LvwtPi79LfwtPS4+Lv0tPy7+Lf0tPi4/Lv4tQC7/Lf4tPy5ALv8tQS4ALv8tQC5BLgAuQi4BLgAuQS5CLgEuQy4CLgEuQi5DLgIuRC4DLgIuQy5ELgMuRS4ELgMuRC5FLgQuRi4FLgQuRS5GLgUuRy4GLgUuRi5HLgYuSC4HLgYuRy5ILgcuSS4ILgcuSC5JLgguSi4JLgguSS5KLgkuSy4KLgkuSi5LLgouTC4LLgouSy5MLgsuTS4MLgsuTC5NLgwuTi4NLgwuTS5OLg0uTy4OLg0uTi5PLg4uUC4PLg4uTy5QLg8uUS4QLg8uUC5RLhAuUi4RLhAuUS5SLhEuUy4SLhEuUi5TLhIuVC4TLhIuUy5ULhMuVS4ULhMuVC5VLhQuVi4VLhQuVS5WLhUuVy4WLhUuVi5XLhYuWC4XLhYuVy5YLhcuWS4YLhcuWC5ZLhguWi4ZLhguWS5aLhkuWy4aLhkuWi5bLhouXC4bLhouWy5cLhsuXS4cLhsuXC5dLhwuXi4dLhwuXS5eLh0uXy4eLh0uXi5fLh4uYC4fLh4uXy5gLh8uYS4gLh8uYC5hLiAuYi4hLiAuYS5iLiEuYy4iLiEuYi5jLiIuZC4jLiIuYy5kLiMuZS4kLiMuZC5lLiQuZi4lLiQuZS5mLiUuZy4mLiUuZi5nLiYuaC4nLiYuZy5oLicuaS4oLicuaC5pLiguai4pLiguaS5qLikuay4qLikuai5rLioubC4rLiouay5sLisubS4sLisubC5tLiwubi4tLiwubS5uLi0uby4uLi0ubi5vLi4ucC4vLi4uby5wLi8ucS4wLi8ucC5xLjAuci4xLjAucS5yLjEucy4yLjEuci5zLjIudC4zLjIucy50LjMudS40LjMudC51LjQudi41LjQudS52LjYueC43LjYudy54LjcueS44LjcueC55Ljguei45LjgueS56Ljkuey46Ljkuei57LjoufC47Ljouey58LjsufS48LjsufC59Ljwufi49LjwufS5+Lj0ufy4+Lj0ufi5/Lj4ugC4/Lj4ufy6ALj8ugS5ALj8ugC6BLkAugi5BLkAugS6CLkEugy5CLkEugi6DLkIuhC5DLkIugy6ELkMuhS5ELkMuhC6FLkQuhi5FLkQuhS6GLkUuhy5GLkUuhi6HLkYuiC5HLkYuhy6ILkcuiS5ILkcuiC6JLkguii5JLkguiS6KLkkuiy5KLkkuii6LLkoujC5LLkouiy6MLksujS5MLksujC6NLkwuji5NLkwujS6OLk0ujy5OLk0uji6PLk4ukC5PLk4ujy6QLk8ukS5QLk8ukC6RLlAuki5RLlAukS6SLlEuky5SLlEuki6TLlIulC5TLlIuky6ULlMulS5ULlMulC6VLlQuli5VLlQulS6WLlUuly5WLlUuli6XLlYumC5XLlYuly6YLlcumS5YLlcumC6ZLlgumi5ZLlgumS6aLlkumy5aLlkumi6bLlounC5bLloumy6cLlsunS5cLlsunC6dLlwuni5dLlwunS6eLl0uny5eLl0uni6fLl4uoC5fLl4uny6gLl8uoS5gLl8uoC6hLmAuoi5hLmAuoS6iLmEuoy5iLmEuoi6jLmIupC5jLmIuoy6kLmMupS5kLmMupC6lLmQupi5lLmQupS6mLmUupy5mLmUupi6nLmYuqC5nLmYupy6oLmcuqS5oLmcuqC6pLmguqi5pLmguqS6qLmkuqy5qLmkuqi6rLmourC5rLmouqy6sLmsurS5sLmsurC6tLmwuri5tLmwurS6uLm0ury5uLm0uri6vLm4usC5vLm4ury6wLm8usS5wLm8usC6xLnAusi5xLnAusS6yLnEusy5yLnEusi6zLnIutC5zLnIusy60LnMutS50LnMutC61LnQuti51LnQutS62LnUuty52LnUuti63LncuuS54LncuuC65Lnguui55LnguuS66Lnkuuy56Lnkuui67LnouvC57Lnouuy68LnsuvS58LnsuvC69Lnwuvi59LnwuvS6+Ln0uvy5+Ln0uvi6/Ln4uwC5/Ln4uvy7ALn8uwS6ALn8uwC7BLoAuwi6BLoAuwS7CLoEuwy6CLoEuwi7DLoIuxC6DLoIuwy7ELoMuxS6ELoMuxC7FLoQuxi6FLoQuxS7GLoUuxy6GLoUuxi7HLoYuyC6HLoYuxy7ILocuyS6ILocuyC7JLoguyi6JLoguyS7KLokuyy6KLokuyi7LLoouzC6LLoouyy7MLosuzS6MLosuzC7NLowuzi6NLowuzS7OLo0uzy6OLo0uzi7PLo4u0C6PLo4uzy7QLo8u0S6QLo8u0C7RLpAu0i6RLpAu0S7SLpEu0y6SLpEu0i7TLpIu1C6TLpIu0y7ULpMu1S6ULpMu1C7VLpQu1i6VLpQu1S7WLpUu1y6WLpUu1i7XLpYu2C6XLpYu1y7YLpcu2S6YLpcu2C7ZLpgu2i6ZLpgu2S7aLpku2y6aLpku2i7bLpou3C6bLpou2y7cLpsu3S6cLpsu3C7dLpwu3i6dLpwu3S7eLp0u3y6eLp0u3i7fLp4u4C6fLp4u3y7gLp8u4S6gLp8u4C7hLqAu4i6hLqAu4S7iLqEu4y6iLqEu4i7jLqIu5C6jLqIu4y7kLqMu5S6kLqMu5C7lLqQu5i6lLqQu5S7mLqUu5y6mLqUu5i7nLqYu6C6nLqYu5y7oLqcu6S6oLqcu6C7pLqgu6i6pLqgu6S7qLqku6y6qLqku6i7rLqou7C6rLqou6y7sLqsu7S6sLqsu7C7tLqwu7i6tLqwu7S7uLq0u7y6uLq0u7i7vLq4u8C6vLq4u7y7wLq8u8S6wLq8u8C7xLrAu8i6xLrAu8S7yLrEu8y6yLrEu8i7zLrIu9C6zLrIu8y70LrMu9S60LrMu9C71LrQu9i61LrQu9S72LrUu9y62LrUu9i73LrYu+C63LrYu9y74Lrgu+i65Lrgu+S76Lrku+y66Lrku+i77Lrou/C67Lrou+y78Lrsu/S68Lrsu/C79Lrwu/i69Lrwu/S7+Lr0u/y6+Lr0u/i7/Lr4uAC+/Lr4u/y4AL78uAS/ALr8uAC8BL8AuAi/BLsAuAS8CL8EuAy/CLsEuAi8DL8IuBC/DLsIuAy8EL8MuBS/ELsMuBC8FL8QuBi/FLsQuBS8GL8UuBy/GLsUuBi8HL8YuCC/HLsYuBy8IL8cuCS/ILscuCC8JL8guCi/JLsguCS8KL8kuCy/KLskuCi8LL8ouDC/LLsouCy8ML8suDS/MLssuDC8NL8wuDi/NLswuDS8OL80uDy/OLs0uDi8PL84uEC/PLs4uDy8QL88uES/QLs8uEC8RL9AuEi/RLtAuES8SL9EuEy/SLtEuEi8TL9IuFC/TLtIuEy8UL9MuFS/ULtMuFC8VL9QuFi/VLtQuFS8WL9UuFy/WLtUuFi8XL9YuGC/XLtYuFy8YL9cuGS/YLtcuGC8ZL9guGi/ZLtguGS8aL9kuGy/aLtkuGi8bL9ouHC/bLtouGy8cL9suHS/cLtsuHC8dL9wuHi/dLtwuHS8eL90uHy/eLt0uHi8fL94uIC/fLt4uHy8gL98uIS/gLt8uIC8hL+AuIi/hLuAuIS8iL+EuIy/iLuEuIi8jL+IuJC/jLuIuIy8kL+MuJS/kLuMuJC8lL+QuJi/lLuQuJS8mL+UuJy/mLuUuJi8nL+YuKC/nLuYuJy8oL+cuKS/oLucuKC8pL+guKi/pLuguKS8qL+kuKy/qLukuKi8rL+ouLC/rLuouKy8sL+suLS/sLusuLC8tL+wuLi/tLuwuLS8uL+0uLy/uLu0uLi8vL+4uMC/vLu4uLy8wL+8uMS/wLu8uMC8xL/AuMi/xLvAuMS8yL/EuMy/yLvEuMi8zL/IuNC/zLvIuMy80L/MuNS/0LvMuNC81L/QuNi/1LvQuNS82L/UuNy/2LvUuNi83L/YuOC/3LvYuNy84L/cuOS/4LvcuOC85L/kuOy/6LvkuOi87L/ouPC/7LvouOy88L/suPS/8LvsuPC89L/wuPi/9LvwuPS8+L/0uPy/+Lv0uPi8/L/4uQC//Lv4uPy9AL/8uQS8AL/8uQC9BLwAvQi8BLwAvQS9CLwEvQy8CLwEvQi9DLwIvRC8DLwIvQy9ELwMvRS8ELwMvRC9FLwQvRi8FLwQvRS9GLwUvRy8GLwUvRi9HLwYvSC8HLwYvRy9ILwcvSS8ILwcvSC9JLwgvSi8JLwgvSS9KLwkvSy8KLwkvSi9LLwovTC8LLwovSy9MLwsvTS8MLwsvTC9NLwwvTi8NLwwvTS9OLw0vTy8OLw0vTi9PLw4vUC8PLw4vTy9QLw8vUS8QLw8vUC9RLxAvUi8RLxAvUS9SLxEvUy8SLxEvUi9TLxIvVC8TLxIvUy9ULxMvVS8ULxMvVC9VLxQvVi8VLxQvVS9WLxUvVy8WLxUvVi9XLxYvWC8XLxYvVy9YLxcvWS8YLxcvWC9ZLxgvWi8ZLxgvWS9aLxkvWy8aLxkvWi9bLxovXC8bLxovWy9cLxsvXS8cLxsvXC9dLxwvXi8dLxwvXS9eLx0vXy8eLx0vXi9fLx4vYC8fLx4vXy9gLx8vYS8gLx8vYC9hLyAvYi8hLyAvYS9iLyEvYy8iLyEvYi9jLyIvZC8jLyIvYy9kLyMvZS8kLyMvZC9lLyQvZi8lLyQvZS9mLyUvZy8mLyUvZi9nLyYvaC8nLyYvZy9oLycvaS8oLycvaC9pLygvai8pLygvaS9qLykvay8qLykvai9rLyovbC8rLyovay9sLysvbS8sLysvbC9tLywvbi8tLywvbS9uLy0vby8uLy0vbi9vLy4vcC8vLy4vby9wLy8vcS8wLy8vcC9xLzAvci8xLzAvcS9yLzEvcy8yLzEvci9zLzIvdC8zLzIvcy90LzMvdS80LzMvdC91LzQvdi81LzQvdS92LzUvdy82LzUvdi93LzYveC83LzYvdy94LzcveS84LzcveC95Lzgvei85LzgveS96LzovfC87Lzovey98LzsvfS88LzsvfC99Lzwvfi89LzwvfS9+Lz0vfy8+Lz0vfi9/Lz4vgC8/Lz4vfy+ALz8vgS9ALz8vgC+BL0Avgi9BL0AvgS+CL0Evgy9CL0Evgi+DL0IvhC9DL0Ivgy+EL0MvhS9EL0MvhC+FL0Qvhi9FL0QvhS+GL0Uvhy9GL0Uvhi+HL0YviC9HL0Yvhy+IL0cviS9IL0cviC+JL0gvii9JL0gviS+KL0kviy9KL0kvii+LL0ovjC9LL0oviy+ML0svjS9ML0svjC+NL0wvji9NL0wvjS+OL00vjy9OL00vji+PL04vkC9PL04vjy+QL08vkS9QL08vkC+RL1Avki9RL1AvkS+SL1Evky9SL1Evki+TL1IvlC9TL1Ivky+UL1MvlS9UL1MvlC+VL1Qvli9VL1QvlS+WL1Uvly9WL1Uvli+XL1YvmC9XL1Yvly+YL1cvmS9YL1cvmC+ZL1gvmi9ZL1gvmS+aL1kvmy9aL1kvmi+bL1ovnC9bL1ovmy+cL1svnS9cL1svnC+dL1wvni9dL1wvnS+eL10vny9eL10vni+fL14voC9fL14vny+gL18voS9gL18voC+hL2Avoi9hL2AvoS+iL2Evoy9iL2Evoi+jL2IvpC9jL2Ivoy+kL2MvpS9kL2MvpC+lL2Qvpi9lL2QvpS+mL2Uvpy9mL2Uvpi+nL2YvqC9nL2Yvpy+oL2cvqS9oL2cvqC+pL2gvqi9pL2gvqS+qL2kvqy9qL2kvqi+rL2ovrC9rL2ovqy+sL2svrS9sL2svrC+tL2wvri9tL2wvrS+uL20vry9uL20vri+vL24vsC9vL24vry+wL28vsS9wL28vsC+xL3Avsi9xL3AvsS+yL3Evsy9yL3Evsi+zL3IvtC9zL3Ivsy+0L3MvtS90L3MvtC+1L3Qvti91L3QvtS+2L3Uvty92L3Uvti+3L3YvuC93L3Yvty+4L3cvuS94L3cvuC+5L3gvui95L3gvuS+6L3kvuy96L3kvui+7L3svvS98L3svvC+9L3wvvi99L3wvvS++L30vvy9+L30vvi+/L34vwC9/L34vvy/AL38vwS+AL38vwC/BL4Avwi+BL4AvwS/CL4Evwy+CL4Evwi/DL4IvxC+DL4Ivwy/EL4MvxS+EL4MvxC/FL4Qvxi+FL4QvxS/GL4Uvxy+GL4Uvxi/HL4YvyC+HL4Yvxy/IL4cvyS+IL4cvyC/JL4gvyi+JL4gvyS/KL4kvyy+KL4kvyi/LL4ovzC+LL4ovyy/ML4svzS+ML4svzC/NL4wvzi+NL4wvzS/OL40vzy+OL40vzi/PL44v0C+PL44vzy/QL48v0S+QL48v0C/RL5Av0i+RL5Av0S/SL5Ev0y+SL5Ev0i/TL5Iv1C+TL5Iv0y/UL5Mv1S+UL5Mv1C/VL5Qv1i+VL5Qv1S/WL5Uv1y+WL5Uv1i/XL5Yv2C+XL5Yv1y/YL5cv2S+YL5cv2C/ZL5gv2i+ZL5gv2S/aL5kv2y+aL5kv2i/bL5ov3C+bL5ov2y/cL5sv3S+cL5sv3C/dL5wv3i+dL5wv3S/eL50v3y+eL50v3i/fL54v4C+fL54v3y/gL58v4S+gL58v4C/hL6Av4i+hL6Av4S/iL6Ev4y+iL6Ev4i/jL6Iv5C+jL6Iv4y/kL6Mv5S+kL6Mv5C/lL6Qv5i+lL6Qv5S/mL6Uv5y+mL6Uv5i/nL6Yv6C+nL6Yv5y/oL6cv6S+oL6cv6C/pL6gv6i+pL6gv6S/qL6kv6y+qL6kv6i/rL6ov7C+rL6ov6y/sL6sv7S+sL6sv7C/tL6wv7i+tL6wv7S/uL60v7y+uL60v7i/vL64v8C+vL64v7y/wL68v8S+wL68v8C/xL7Av8i+xL7Av8S/yL7Ev8y+yL7Ev8i/zL7Iv9C+zL7Iv8y/0L7Mv9S+0L7Mv9C/1L7Qv9i+1L7Qv9S/2L7Uv9y+2L7Uv9i/3L7Yv+C+3L7Yv9y/4L7cv+S+4L7cv+C/5L7gv+i+5L7gv+S/6L7kv+y+6L7kv+i/7L7ov/C+7L7ov+y/8L7wv/i+9L7wv/S/+L70v/y++L70v/i//L74vADC/L74v/y8AML8vATDAL78vADABMMAvAjDBL8AvATACMMEvAzDCL8EvAjADMMIvBDDDL8IvAzAEMMMvBTDEL8MvBDAFMMQvBjDFL8QvBTAGMMUvBzDGL8UvBjAHMMYvCDDHL8YvBzAIMMcvCTDIL8cvCDAJMMgvCjDJL8gvCTAKMMkvCzDKL8kvCjALMMovDDDLL8ovCzAMMMsvDTDML8svDDANMMwvDjDNL8wvDTAOMM0vDzDOL80vDjAPMM4vEDDPL84vDzAQMM8vETDQL88vEDARMNAvEjDRL9AvETASMNEvEzDSL9EvEjATMNIvFDDTL9IvEzAUMNMvFTDUL9MvFDAVMNQvFjDVL9QvFTAWMNUvFzDWL9UvFjAXMNYvGDDXL9YvFzAYMNcvGTDYL9cvGDAZMNgvGjDZL9gvGTAaMNkvGzDaL9kvGjAbMNovHDDbL9ovGzAcMNsvHTDcL9svHDAdMNwvHjDdL9wvHTAeMN0vHzDeL90vHjAfMN4vIDDfL94vHzAgMN8vITDgL98vIDAhMOAvIjDhL+AvITAiMOEvIzDiL+EvIjAjMOIvJDDjL+IvIzAkMOMvJTDkL+MvJDAlMOQvJjDlL+QvJTAmMOUvJzDmL+UvJjAnMOYvKDDnL+YvJzAoMOcvKTDoL+cvKDApMOgvKjDpL+gvKTAqMOkvKzDqL+kvKjArMOovLDDrL+ovKzAsMOsvLTDsL+svLDAtMOwvLjDtL+wvLTAuMO0vLzDuL+0vLjAvMO4vMDDvL+4vLzAwMO8vMTDwL+8vMDAxMPAvMjDxL/AvMTAyMPEvMzDyL/EvMjAzMPIvNDDzL/IvMzA0MPMvNTD0L/MvNDA1MPQvNjD1L/QvNTA2MPUvNzD2L/UvNjA3MPYvODD3L/YvNzA4MPcvOTD4L/cvODA5MPgvOjD5L/gvOTA6MPkvOzD6L/kvOjA7MPovPDD7L/ovOzA8MPsvPTD8L/svPDA9MP0vPzD+L/0vPjA/MP4vQDD/L/4vPzBAMP8vQTAAMP8vQDBBMAAwQjABMAAwQTBCMAEwQzACMAEwQjBDMAIwRDADMAIwQzBEMAMwRTAEMAMwRDBFMAQwRjAFMAQwRTBGMAUwRzAGMAUwRjBHMAYwSDAHMAYwRzBIMAcwSTAIMAcwSDBJMAgwSjAJMAgwSTBKMAkwSzAKMAkwSjBLMAowTDALMAowSzBMMAswTTAMMAswTDBNMAwwTjANMAwwTTBOMA0wTzAOMA0wTjBPMA4wUDAPMA4wTzBQMA8wUTAQMA8wUDBRMBAwUjARMBAwUTBSMBEwUzASMBEwUjBTMBIwVDATMBIwUzBUMBMwVTAUMBMwVDBVMBQwVjAVMBQwVTBWMBUwVzAWMBUwVjBXMBYwWDAXMBYwVzBYMBcwWTAYMBcwWDBZMBgwWjAZMBgwWTBaMBkwWzAaMBkwWjBbMBowXDAbMBowWzBcMBswXTAcMBswXDBdMBwwXjAdMBwwXTBeMB0wXzAeMB0wXjBfMB4wYDAfMB4wXzBgMB8wYTAgMB8wYDBhMCAwYjAhMCAwYTBiMCEwYzAiMCEwYjBjMCIwZDAjMCIwYzBkMCMwZTAkMCMwZDBlMCQwZjAlMCQwZTBmMCUwZzAmMCUwZjBnMCYwaDAnMCYwZzBoMCcwaTAoMCcwaDBpMCgwajApMCgwaTBqMCkwazAqMCkwajBrMCowbDArMCowazBsMCswbTAsMCswbDBtMCwwbjAtMCwwbTBuMC0wbzAuMC0wbjBvMC4wcDAvMC4wbzBwMC8wcTAwMC8wcDBxMDAwcjAxMDAwcTByMDEwczAyMDEwcjBzMDIwdDAzMDIwczB0MDMwdTA0MDMwdDB1MDQwdjA1MDQwdTB2MDUwdzA2MDUwdjB3MDYweDA3MDYwdzB4MDcweTA4MDcweDB5MDgwejA5MDgweTB6MDkwezA6MDkwejB7MDowfDA7MDowezB8MDswfTA8MDswfDB9MDwwfjA9MDwwfTB+MD4wgDA/MD4wfzCAMD8wgTBAMD8wgDCBMEAwgjBBMEAwgTCCMEEwgzBCMEEwgjCDMEIwhDBDMEIwgzCEMEMwhTBEMEMwhDCFMEQwhjBFMEQwhTCGMEUwhzBGMEUwhjCHMEYwiDBHMEYwhzCIMEcwiTBIMEcwiDCJMEgwijBJMEgwiTCKMEkwizBKMEkwijCLMEowjDBLMEowizCMMEswjTBMMEswjDCNMEwwjjBNMEwwjTCOME0wjzBOME0wjjCPME4wkDBPME4wjzCQME8wkTBQME8wkDCRMFAwkjBRMFAwkTCSMFEwkzBSMFEwkjCTMFIwlDBTMFIwkzCUMFMwlTBUMFMwlDCVMFQwljBVMFQwlTCWMFUwlzBWMFUwljCXMFYwmDBXMFYwlzCYMFcwmTBYMFcwmDCZMFgwmjBZMFgwmTCaMFkwmzBaMFkwmjCbMFownDBbMFowmzCcMFswnTBcMFswnDCdMFwwnjBdMFwwnTCeMF0wnzBeMF0wnjCfMF4woDBfMF4wnzCgMF8woTBgMF8woDChMGAwojBhMGAwoTCiMGEwozBiMGEwojCjMGIwpDBjMGIwozCkMGMwpTBkMGMwpDClMGQwpjBlMGQwpTCmMGUwpzBmMGUwpjCnMGYwqDBnMGYwpzCoMGcwqTBoMGcwqDCpMGgwqjBpMGgwqTCqMGkwqzBqMGkwqjCrMGowrDBrMGowqzCsMGswrTBsMGswrDCtMGwwrjBtMGwwrTCuMG0wrzBuMG0wrjCvMG4wsDBvMG4wrzCwMG8wsTBwMG8wsDCxMHAwsjBxMHAwsTCyMHEwszByMHEwsjCzMHIwtDBzMHIwszC0MHMwtTB0MHMwtDC1MHQwtjB1MHQwtTC2MHUwtzB2MHUwtjC3MHYwuDB3MHYwtzC4MHcwuTB4MHcwuDC5MHgwujB5MHgwuTC6MHkwuzB6MHkwujC7MHowvDB7MHowuzC8MHswvTB8MHswvDC9MHwwvjB9MHwwvTC+MH0wvzB+MH0wvjC/MH8wAQCAMH8wAAABAIAwAgCBMIAwAQACAIEwAwCCMIEwAgADAIIwBACDMIIwAwAEAIMwBQCEMIMwBAAFAIQwBgCFMIQwBQAGAIUwBwCGMIUwBgAHAIYwCACHMIYwBwAIAIcwCQCIMIcwCAAJAIgwCgCJMIgwCQAKAIkwCwCKMIkwCgALAIowDACLMIowCwAMAIswDQCMMIswDAANAIwwDgCNMIwwDQAOAI0wDwCOMI0wDgAPAI4wEACPMI4wDwAQAI8wEQCQMI8wEAARAJAwEgCRMJAwEQASAJEwEwCSMJEwEgATAJIwFACTMJIwEwAUAJMwFQCUMJMwFAAVAJQwFgCVMJQwFQAWAJUwFwCWMJUwFgAXAJYwGACXMJYwFwAYAJcwGQCYMJcwGAAZAJgwGgCZMJgwGQAaAJkwGwCaMJkwGgAbAJowHACbMJowGwAcAJswHQCcMJswHAAdAJwwHgCdMJwwHQAeAJ0wHwCeMJ0wHgAfAJ4wIACfMJ4wHwAgAJ8wIQCgMJ8wIAAhAKAwIgChMKAwIQAiAKEwIwCiMKEwIgAjAKIwJACjMKIwIwAkAKMwJQCkMKMwJAAlAKQwJgClMKQwJQAmAKUwJwCmMKUwJgAnAKYwKACnMKYwJwAoAKcwKQCoMKcwKAApAKgwKgCpMKgwKQAqAKkwKwCqMKkwKgArAKowLACrMKowKwAsAKswLQCsMKswLAAtAKwwLgCtMKwwLQAuAK0wLwCuMK0wLgAvAK4wMACvMK4wLwAwAK8wMQCwMK8wMAAxALAwMgCxMLAwMQAyALEwMwCyMLEwMgAzALIwNACzMLIwMwA0ALMwNQC0MLMwNAA1ALQwNgC1MLQwNQA2ALUwNwC2MLUwNgA3ALYwOAC3MLYwNwA4ALcwOQC4MLcwOAA5ALgwOgC5MLgwOQA6ALkwOwC6MLkwOgA7ALowPAC7MLowOwA8ALswPQC8MLswPAA9ALwwPgC9MLwwPQA+AL0wPwC+ML0wPgA/AL4wQAC/ML4wPwBAAMAwAjHBMMAwATECMcEwAzHCMMEwAjEDMcIwBDHDMMIwAzEEMcMwBTHEMMMwBDEFMcQwBjHFMMQwBTEGMcUwBzHGMMUwBjEHMcYwCDHHMMYwBzEIMccwCTHIMMcwCDEJMcgwCjHJMMgwCTEKMckwCzHKMMkwCjELMcowDDHLMMowCzEMMcswDTHMMMswDDENMcwwDjHNMMwwDTEOMc0wDzHOMM0wDjEPMc4wEDHPMM4wDzEQMc8wETHQMM8wEDERMdAwEjHRMNAwETESMdEwEzHSMNEwEjETMdIwFDHTMNIwEzEUMdMwFTHUMNMwFDEVMdQwFjHVMNQwFTEWMdUwFzHWMNUwFjEXMdYwGDHXMNYwFzEYMdcwGTHYMNcwGDEZMdgwGjHZMNgwGTEaMdkwGzHaMNkwGjEbMdowHDHbMNowGzEcMdswHTHcMNswHDEdMdwwHjHdMNwwHTEeMd0wHzHeMN0wHjEfMd4wIDHfMN4wHzEgMd8wITHgMN8wIDEhMeAwIjHhMOAwITEiMeEwIzHiMOEwIjEjMeIwJDHjMOIwIzEkMeMwJTHkMOMwJDElMeQwJjHlMOQwJTEmMeUwJzHmMOUwJjEnMeYwKDHnMOYwJzEoMecwKTHoMOcwKDEpMegwKjHpMOgwKTEqMekwKzHqMOkwKjErMeowLDHrMOowKzEsMeswLTHsMOswLDEtMewwLjHtMOwwLTEuMe0wLzHuMO0wLjEvMe4wMDHvMO4wLzEwMe8wMTHwMO8wMDExMfAwMjHxMPAwMTEyMfEwMzHyMPEwMjEzMfIwNDHzMPIwMzE0MfMwNTH0MPMwNDE1MfQwNjH1MPQwNTE2MfUwNzH2MPUwNjE3MfYwODH3MPYwNzE4MfcwOTH4MPcwODE5MfgwOjH5MPgwOTE6MfkwOzH6MPkwOjE7MfowPDH7MPowOzE8MfswPTH8MPswPDE9MfwwPjH9MPwwPTE+Mf0wPzH+MP0wPjE/Mf4wQDH/MP4wPzFAMf8wQTEAMf8wQDFBMQExQzECMQExQjFDMQIxRDEDMQIxQzFEMQMxRTEEMQMxRDFFMQQxRjEFMQQxRTFGMQUxRzEGMQUxRjFHMQYxSDEHMQYxRzFIMQcxSTEIMQcxSDFJMQgxSjEJMQgxSTFKMQkxSzEKMQkxSjFLMQoxTDELMQoxSzFMMQsxTTEMMQsxTDFNMQwxTjENMQwxTTFOMQ0xTzEOMQ0xTjFPMQ4xUDEPMQ4xTzFQMQ8xUTEQMQ8xUDFRMRAxUjERMRAxUTFSMRExUzESMRExUjFTMRIxVDETMRIxUzFUMRMxVTEUMRMxVDFVMRQxVjEVMRQxVTFWMRUxVzEWMRUxVjFXMRYxWDEXMRYxVzFYMRcxWTEYMRcxWDFZMRgxWjEZMRgxWTFaMRkxWzEaMRkxWjFbMRoxXDEbMRoxWzFcMRsxXTEcMRsxXDFdMRwxXjEdMRwxXTFeMR0xXzEeMR0xXjFfMR4xYDEfMR4xXzFgMR8xYTEgMR8xYDFhMSAxYjEhMSAxYTFiMSExYzEiMSExYjFjMSIxZDEjMSIxYzFkMSMxZTEkMSMxZDFlMSQxZjElMSQxZTFmMSUxZzEmMSUxZjFnMSYxaDEnMSYxZzFoMScxaTEoMScxaDFpMSgxajEpMSgxaTFqMSkxazEqMSkxajFrMSoxbDErMSoxazFsMSsxbTEsMSsxbDFtMSwxbjEtMSwxbTFuMS0xbzEuMS0xbjFvMS4xcDEvMS4xbzFwMS8xcTEwMS8xcDFxMTAxcjExMTAxcTFyMTExczEyMTExcjFzMTIxdDEzMTIxczF0MTMxdTE0MTMxdDF1MTQxdjE1MTQxdTF2MTUxdzE2MTUxdjF3MTYxeDE3MTYxdzF4MTcxeTE4MTcxeDF5MTgxejE5MTgxeTF6MTkxezE6MTkxejF7MToxfDE7MToxezF8MTsxfTE8MTsxfDF9MTwxfjE9MTwxfTF+MT0xfzE+MT0xfjF/MT4xgDE/MT4xfzGAMT8xgTFAMT8xgDGBMUAxgjFBMUAxgTGCMUIxhDFDMUIxgzGEMUMxhTFEMUMxhDGFMUQxhjFFMUQxhTGGMUUxhzFGMUUxhjGHMUYxiDFHMUYxhzGIMUcxiTFIMUcxiDGJMUgxijFJMUgxiTGKMUkxizFKMUkxijGLMUoxjDFLMUoxizGMMUsxjTFMMUsxjDGNMUwxjjFNMUwxjTGOMU0xjzFOMU0xjjGPMU4xkDFPMU4xjzGQMU8xkTFQMU8xkDGRMVAxkjFRMVAxkTGSMVExkzFSMVExkjGTMVIxlDFTMVIxkzGUMVMxlTFUMVMxlDGVMVQxljFVMVQxlTGWMVUxlzFWMVUxljGXMVYxmDFXMVYxlzGYMVcxmTFYMVcxmDGZMVgxmjFZMVgxmTGaMVkxmzFaMVkxmjGbMVoxnDFbMVoxmzGcMVsxnTFcMVsxnDGdMVwxnjFdMVwxnTGeMV0xnzFeMV0xnjGfMV4xoDFfMV4xnzGgMV8xoTFgMV8xoDGhMWAxojFhMWAxoTGiMWExozFiMWExojGjMWIxpDFjMWIxozGkMWMxpTFkMWMxpDGlMWQxpjFlMWQxpTGmMWUxpzFmMWUxpjGnMWYxqDFnMWYxpzGoMWcxqTFoMWcxqDGpMWgxqjFpMWgxqTGqMWkxqzFqMWkxqjGrMWoxrDFrMWoxqzGsMWsxrTFsMWsxrDGtMWwxrjFtMWwxrTGuMW0xrzFuMW0xrjGvMW4xsDFvMW4xrzGwMW8xsTFwMW8xsDGxMXAxsjFxMXAxsTGyMXExszFyMXExsjGzMXIxtDFzMXIxszG0MXMxtTF0MXMxtDG1MXQxtjF1MXQxtTG2MXUxtzF2MXUxtjG3MXYxuDF3MXYxtzG4MXcxuTF4MXcxuDG5MXgxujF5MXgxuTG6MXkxuzF6MXkxujG7MXoxvDF7MXoxuzG8MXsxvTF8MXsxvDG9MXwxvjF9MXwxvTG+MX0xvzF+MX0xvjG/MX4xwDF/MX4xvzHAMX8xwTGAMX8xwDHBMYAxwjGBMYAxwTHCMYExwzGCMYExwjHDMYMxxTGEMYMxxDHFMYQxxjGFMYQxxTHGMYUxxzGGMYUxxjHHMYYxyDGHMYYxxzHIMYcxyTGIMYcxyDHJMYgxyjGJMYgxyTHKMYkxyzGKMYkxyjHLMYoxzDGLMYoxyzHMMYsxzTGMMYsxzDHNMYwxzjGNMYwxzTHOMY0xzzGOMY0xzjHPMY4x0DGPMY4xzzHQMY8x0TGQMY8x0DHRMZAx0jGRMZAx0THSMZEx0zGSMZEx0jHTMZIx1DGTMZIx0zHUMZMx1TGUMZMx1DHVMZQx1jGVMZQx1THWMZUx1zGWMZUx1jHXMZYx2DGXMZYx1zHYMZcx2TGYMZcx2DHZMZgx2jGZMZgx2THaMZkx2zGaMZkx2jHbMZox3DGbMZox2zHcMZsx3TGcMZsx3DHdMZwx3jGdMZwx3THeMZ0x3zGeMZ0x3jHfMZ4x4DGfMZ4x3zHgMZ8x4TGgMZ8x4DHhMaAx4jGhMaAx4THiMaEx4zGiMaEx4jHjMaIx5DGjMaIx4zHkMaMx5TGkMaMx5DHlMaQx5jGlMaQx5THmMaUx5zGmMaUx5jHnMaYx6DGnMaYx5zHoMacx6TGoMacx6DHpMagx6jGpMagx6THqMakx6zGqMakx6jHrMaox7DGrMaox6zHsMasx7TGsMasx7DHtMawx7jGtMawx7THuMa0x7zGuMa0x7jHvMa4x8DGvMa4x7zHwMa8x8TGwMa8x8DHxMbAx8jGxMbAx8THyMbEx8zGyMbEx8jHzMbIx9DGzMbIx8zH0MbMx9TG0MbMx9DH1MbQx9jG1MbQx9TH2MbUx9zG2MbUx9jH3MbYx+DG3MbYx9zH4Mbcx+TG4Mbcx+DH5Mbgx+jG5Mbgx+TH6Mbkx+zG6Mbkx+jH7Mbox/DG7Mbox+zH8Mbsx/TG8Mbsx/DH9Mbwx/jG9Mbwx/TH+Mb0x/zG+Mb0x/jH/Mb4xADK/Mb4x/zEAMr8xATLAMb8xADIBMsAxAjLBMcAxATICMsExAzLCMcExAjIDMsIxBDLDMcIxAzIEMsQxBjLFMcQxBTIGMsUxBzLGMcUxBjIHMsYxCDLHMcYxBzIIMscxCTLIMccxCDIJMsgxCjLJMcgxCTIKMskxCzLKMckxCjILMsoxDDLLMcoxCzIMMssxDTLMMcsxDDINMswxDjLNMcwxDTIOMs0xDzLOMc0xDjIPMs4xEDLPMc4xDzIQMs8xETLQMc8xEDIRMtAxEjLRMdAxETISMtExEzLSMdExEjITMtIxFDLTMdIxEzIUMtMxFTLUMdMxFDIVMtQxFjLVMdQxFTIWMtUxFzLWMdUxFjIXMtYxGDLXMdYxFzIYMtcxGTLYMdcxGDIZMtgxGjLZMdgxGTIaMtkxGzLaMdkxGjIbMtoxHDLbMdoxGzIcMtsxHTLcMdsxHDIdMtwxHjLdMdwxHTIeMt0xHzLeMd0xHjIfMt4xIDLfMd4xHzIgMt8xITLgMd8xIDIhMuAxIjLhMeAxITIiMuExIzLiMeExIjIjMuIxJDLjMeIxIzIkMuMxJTLkMeMxJDIlMuQxJjLlMeQxJTImMuUxJzLmMeUxJjInMuYxKDLnMeYxJzIoMucxKTLoMecxKDIpMugxKjLpMegxKTIqMukxKzLqMekxKjIrMuoxLDLrMeoxKzIsMusxLTLsMesxLDItMuwxLjLtMewxLTIuMu0xLzLuMe0xLjIvMu4xMDLvMe4xLzIwMu8xMTLwMe8xMDIxMvAxMjLxMfAxMTIyMvExMzLyMfExMjIzMvIxNDLzMfIxMzI0MvMxNTL0MfMxNDI1MvQxNjL1MfQxNTI2MvUxNzL2MfUxNjI3MvYxODL3MfYxNzI4MvcxOTL4MfcxODI5MvgxOjL5MfgxOTI6MvkxOzL6MfkxOjI7MvoxPDL7MfoxOzI8MvsxPTL8MfsxPDI9MvwxPjL9MfwxPTI+Mv0xPzL+Mf0xPjI/Mv4xQDL/Mf4xPzJAMv8xQTIAMv8xQDJBMgAyQjIBMgAyQTJCMgEyQzICMgEyQjJDMgIyRDIDMgIyQzJEMgMyRTIEMgMyRDJFMgUyRzIGMgUyRjJHMgYySDIHMgYyRzJIMgcySTIIMgcySDJJMggySjIJMggySTJKMgkySzIKMgkySjJLMgoyTDILMgoySzJMMgsyTTIMMgsyTDJNMgwyTjINMgwyTTJOMg0yTzIOMg0yTjJPMg4yUDIPMg4yTzJQMg8yUTIQMg8yUDJRMhAyUjIRMhAyUTJSMhEyUzISMhEyUjJTMhIyVDITMhIyUzJUMhMyVTIUMhMyVDJVMhQyVjIVMhQyVTJWMhUyVzIWMhUyVjJXMhYyWDIXMhYyVzJYMhcyWTIYMhcyWDJZMhgyWjIZMhgyWTJaMhkyWzIaMhkyWjJbMhoyXDIbMhoyWzJcMhsyXTIcMhsyXDJdMhwyXjIdMhwyXTJeMh0yXzIeMh0yXjJfMh4yYDIfMh4yXzJgMh8yYTIgMh8yYDJhMiAyYjIhMiAyYTJiMiEyYzIiMiEyYjJjMiIyZDIjMiIyYzJkMiMyZTIkMiMyZDJlMiQyZjIlMiQyZTJmMiUyZzImMiUyZjJnMiYyaDInMiYyZzJoMicyaTIoMicyaDJpMigyajIpMigyaTJqMikyazIqMikyajJrMioybDIrMioyazJsMisybTIsMisybDJtMiwybjItMiwybTJuMi0ybzIuMi0ybjJvMi4ycDIvMi4ybzJwMi8ycTIwMi8ycDJxMjAycjIxMjAycTJyMjEyczIyMjEycjJzMjIydDIzMjIyczJ0MjMydTI0MjMydDJ1MjQydjI1MjQydTJ2MjUydzI2MjUydjJ3MjYyeDI3MjYydzJ4MjcyeTI4MjcyeDJ5MjgyejI5MjgyeTJ6MjkyezI6MjkyejJ7MjoyfDI7MjoyezJ8MjsyfTI8MjsyfDJ9MjwyfjI9MjwyfTJ+Mj0yfzI+Mj0yfjJ/Mj4ygDI/Mj4yfzKAMj8ygTJAMj8ygDKBMkAygjJBMkAygTKCMkEygzJCMkEygjKDMkIyhDJDMkIygzKEMkMyhTJEMkMyhDKFMkQyhjJFMkQyhTKGMkYyiDJHMkYyhzKIMkcyiTJIMkcyiDKJMkgyijJJMkgyiTKKMkkyizJKMkkyijKLMkoyjDJLMkoyizKMMksyjTJMMksyjDKNMkwyjjJNMkwyjTKOMk0yjzJOMk0yjjKPMk4ykDJPMk4yjzKQMk8ykTJQMk8ykDKRMlAykjJRMlAykTKSMlEykzJSMlEykjKTMlIylDJTMlIykzKUMlMylTJUMlMylDKVMlQyljJVMlQylTKWMlUylzJWMlUyljKXMlYymDJXMlYylzKYMlcymTJYMlcymDKZMlgymjJZMlgymTKaMlkymzJaMlkymjKbMloynDJbMloymzKcMlsynTJcMlsynDKdMlwynjJdMlwynTKeMl0ynzJeMl0ynjKfMl4yoDJfMl4ynzKgMl8yoTJgMl8yoDKhMmAyojJhMmAyoTKiMmEyozJiMmEyojKjMmIypDJjMmIyozKkMmMypTJkMmMypDKlMmQypjJlMmQypTKmMmUypzJmMmUypjKnMmYyqDJnMmYypzKoMmcyqTJoMmcyqDKpMmgyqjJpMmgyqTKqMmkyqzJqMmkyqjKrMmoyrDJrMmoyqzKsMmsyrTJsMmsyrDKtMmwyrjJtMmwyrTKuMm0yrzJuMm0yrjKvMm4ysDJvMm4yrzKwMm8ysTJwMm8ysDKxMnAysjJxMnAysTKyMnEyszJyMnEysjKzMnIytDJzMnIyszK0MnMytTJ0MnMytDK1MnQytjJ1MnQytTK2MnUytzJ2MnUytjK3MnYyuDJ3MnYytzK4MncyuTJ4MncyuDK5MngyujJ5MngyuTK6MnkyuzJ6MnkyujK7MnoyvDJ7MnoyuzK8MnsyvTJ8MnsyvDK9MnwyvjJ9MnwyvTK+Mn0yvzJ+Mn0yvjK/Mn4ywDJ/Mn4yvzLAMn8ywTKAMn8ywDLBMoAywjKBMoAywTLCMoEywzKCMoEywjLDMoIyxDKDMoIywzLEMoMyxTKEMoMyxDLFMoQyxjKFMoQyxTLGMoUyxzKGMoUyxjLHMocyyTKIMocyyDLJMogyyjKJMogyyTLKMokyyzKKMokyyjLLMooyzDKLMooyyzLMMosyzTKMMosyzDLNMowyzjKNMowyzTLOMo0yzzKOMo0yzjLPMo4y0DKPMo4yzzLQMo8y0TKQMo8y0DLRMpAy0jKRMpAy0TLSMpEy0zKSMpEy0jLTMpIy1DKTMpIy0zLUMpMy1TKUMpMy1DLVMpQy1jKVMpQy1TLWMpUy1zKWMpUy1jLXMpYy2DKXMpYy1zLYMpcy2TKYMpcy2DLZMpgy2jKZMpgy2TLaMpky2zKaMpky2jLbMpoy3DKbMpoy2zLcMpsy3TKcMpsy3DLdMpwy3jKdMpwy3TLeMp0y3zKeMp0y3jLfMp4y4DKfMp4y3zLgMp8y4TKgMp8y4DLhMqAy4jKhMqAy4TLiMqEy4zKiMqEy4jLjMqIy5DKjMqIy4zLkMqMy5TKkMqMy5DLlMqQy5jKlMqQy5TLmMqUy5zKmMqUy5jLnMqYy6DKnMqYy5zLoMqcy6TKoMqcy6DLpMqgy6jKpMqgy6TLqMqky6zKqMqky6jLrMqoy7DKrMqoy6zLsMqsy7TKsMqsy7DLtMqwy7jKtMqwy7TLuMq0y7zKuMq0y7jLvMq4y8DKvMq4y7zLwMq8y8TKwMq8y8DLxMrAy8jKxMrAy8TLyMrEy8zKyMrEy8jLzMrIy9DKzMrIy8zL0MrMy9TK0MrMy9DL1MrQy9jK1MrQy9TL2MrUy9zK2MrUy9jL3MrYy+DK3MrYy9zL4Mrcy+TK4Mrcy+DL5Mrgy+jK5Mrgy+TL6Mrky+zK6Mrky+jL7Mroy/DK7Mroy+zL8Mrsy/TK8Mrsy/DL9Mrwy/jK9Mrwy/TL+Mr0y/zK+Mr0y/jL/Mr4yADO/Mr4y/zIAM78yATPAMr8yADMBM8AyAjPBMsAyATMCM8EyAzPCMsEyAjMDM8IyBDPDMsIyAzMEM8MyBTPEMsMyBDMFM8QyBjPFMsQyBTMGM8UyBzPGMsUyBjMHM8YyCDPHMsYyBzMIM8gyCjPJMsgyCTMKM8kyCzPKMskyCjMLM8oyDDPLMsoyCzMMM8syDTPMMssyDDMNM8wyDjPNMswyDTMOM80yDzPOMs0yDjMPM84yEDPPMs4yDzMQM88yETPQMs8yEDMRM9AyEjPRMtAyETMSM9EyEzPSMtEyEjMTM9IyFDPTMtIyEzMUM9MyFTPUMtMyFDMVM9QyFjPVMtQyFTMWM9UyFzPWMtUyFjMXM9YyGDPXMtYyFzMYM9cyGTPYMtcyGDMZM9gyGjPZMtgyGTMaM9kyGzPaMtkyGjMbM9oyHDPbMtoyGzMcM9syHTPcMtsyHDMdM9wyHjPdMtwyHTMeM90yHzPeMt0yHjMfM94yIDPfMt4yHzMgM98yITPgMt8yIDMhM+AyIjPhMuAyITMiM+EyIzPiMuEyIjMjM+IyJDPjMuIyIzMkM+MyJTPkMuMyJDMlM+QyJjPlMuQyJTMmM+UyJzPmMuUyJjMnM+YyKDPnMuYyJzMoM+cyKTPoMucyKDMpM+gyKjPpMugyKTMqM+kyKzPqMukyKjMrM+oyLDPrMuoyKzMsM+syLTPsMusyLDMtM+wyLjPtMuwyLTMuM+0yLzPuMu0yLjMvM+4yMDPvMu4yLzMwM+8yMTPwMu8yMDMxM/AyMjPxMvAyMTMyM/EyMzPyMvEyMjMzM/IyNDPzMvIyMzM0M/MyNTP0MvMyNDM1M/QyNjP1MvQyNTM2M/UyNzP2MvUyNjM3M/YyODP3MvYyNzM4M/cyOTP4MvcyODM5M/gyOjP5MvgyOTM6M/kyOzP6MvkyOjM7M/oyPDP7MvoyOzM8M/syPTP8MvsyPDM9M/wyPjP9MvwyPTM+M/0yPzP+Mv0yPjM/M/4yQDP/Mv4yPzNAM/8yQTMAM/8yQDNBMwAzQjMBMwAzQTNCMwEzQzMCMwEzQjNDMwIzRDMDMwIzQzNEMwMzRTMEMwMzRDNFMwQzRjMFMwQzRTNGMwUzRzMGMwUzRjNHMwYzSDMHMwYzRzNIMwczSTMIMwczSDNJMwkzSzMKMwkzSjNLMwozTDMLMwozSzNMMwszTTMMMwszTDNNMwwzTjMNMwwzTTNOMw0zTzMOMw0zTjNPMw4zUDMPMw4zTzNQMw8zUTMQMw8zUDNRMxAzUjMRMxAzUTNSMxEzUzMSMxEzUjNTMxIzVDMTMxIzUzNUMxMzVTMUMxMzVDNVMxQzVjMVMxQzVTNWMxUzVzMWMxUzVjNXMxYzWDMXMxYzVzNYMxczWTMYMxczWDNZMxgzWjMZMxgzWTNaMxkzWzMaMxkzWjNbMxozXDMbMxozWzNcMxszXTMcMxszXDNdMxwzXjMdMxwzXTNeMx0zXzMeMx0zXjNfMx4zYDMfMx4zXzNgMx8zYTMgMx8zYDNhMyAzYjMhMyAzYTNiMyEzYzMiMyEzYjNjMyIzZDMjMyIzYzNkMyMzZTMkMyMzZDNlMyQzZjMlMyQzZTNmMyUzZzMmMyUzZjNnMyYzaDMnMyYzZzNoMyczaTMoMyczaDNpMygzajMpMygzaTNqMykzazMqMykzajNrMyozbDMrMyozazNsMyszbTMsMyszbDNtMywzbjMtMywzbTNuMy0zbzMuMy0zbjNvMy4zcDMvMy4zbzNwMy8zcTMwMy8zcDNxMzAzcjMxMzAzcTNyMzEzczMyMzEzcjNzMzIzdDMzMzIzczN0MzMzdTM0MzMzdDN1MzQzdjM1MzQzdTN2MzUzdzM2MzUzdjN3MzYzeDM3MzYzdzN4MzczeTM4MzczeDN5MzgzejM5MzgzeTN6MzkzezM6MzkzejN7MzozfDM7MzozezN8MzszfTM8MzszfDN9MzwzfjM9MzwzfTN+Mz0zfzM+Mz0zfjN/Mz4zgDM/Mz4zfzOAMz8zgTNAMz8zgDOBM0AzgjNBM0AzgTOCM0EzgzNCM0EzgjODM0IzhDNDM0IzgzOEM0MzhTNEM0MzhDOFM0QzhjNFM0QzhTOGM0UzhzNGM0UzhjOHM0YziDNHM0YzhzOIM0cziTNIM0cziDOJM0gzijNJM0gziTOKM0ozjDNLM0ozizOMM0szjTNMM0szjDONM0wzjjNNM0wzjTOOM00zjzNOM00zjjOPM04zkDNPM04zjzOQM08zkTNQM08zkDORM1AzkjNRM1AzkTOSM1EzkzNSM1EzkjOTM1IzlDNTM1IzkzOUM1MzlTNUM1MzlDOVM1QzljNVM1QzlTOWM1UzlzNWM1UzljOXM1YzmDNXM1YzlzOYM1czmTNYM1czmDOZM1gzmjNZM1gzmTOaM1kzmzNaM1kzmjObM1oznDNbM1ozmzOcM1sznTNcM1sznDOdM1wznjNdM1wznTOeM10znzNeM10znjOfM14zoDNfM14znzOgM18zoTNgM18zoDOhM2AzojNhM2AzoTOiM2EzozNiM2EzojOjM2IzpDNjM2IzozOkM2MzpTNkM2MzpDOlM2QzpjNlM2QzpTOmM2UzpzNmM2UzpjOnM2YzqDNnM2YzpzOoM2czqTNoM2czqDOpM2gzqjNpM2gzqTOqM2kzqzNqM2kzqjOrM2ozrDNrM2ozqzOsM2szrTNsM2szrDOtM2wzrjNtM2wzrTOuM20zrzNuM20zrjOvM24zsDNvM24zrzOwM28zsTNwM28zsDOxM3AzsjNxM3AzsTOyM3EzszNyM3EzsjOzM3IztDNzM3IzszO0M3MztTN0M3MztDO1M3QztjN1M3QztTO2M3UztzN2M3UztjO3M3YzuDN3M3YztzO4M3czuTN4M3czuDO5M3gzujN5M3gzuTO6M3kzuzN6M3kzujO7M3ozvDN7M3ozuzO8M3szvTN8M3szvDO9M3wzvjN9M3wzvTO+M30zvzN+M30zvjO/M34zwDN/M34zvzPAM38zwTOAM38zwDPBM4AzwjOBM4AzwTPCM4EzwzOCM4EzwjPDM4IzxDODM4IzwzPEM4MzxTOEM4MzxDPFM4QzxjOFM4QzxTPGM4UzxzOGM4UzxjPHM4YzyDOHM4YzxzPIM4czyTOIM4czyDPJM4gzyjOJM4gzyTPKM4kzyzOKM4kzyjPLM4szzTOMM4szzDPNM4wzzjONM4wzzTPOM40zzzOOM40zzjPPM44z0DOPM44zzzPQM48z0TOQM48z0DPRM5Az0jORM5Az0TPSM5Ez0zOSM5Ez0jPTM5Iz1DOTM5Iz0zPUM5Mz1TOUM5Mz1DPVM5Qz1jOVM5Qz1TPWM5Uz1zOWM5Uz1jPXM5Yz2DOXM5Yz1zPYM5cz2TOYM5cz2DPZM5gz2jOZM5gz2TPaM5kz2zOaM5kz2jPbM5oz3DObM5oz2zPcM5sz3TOcM5sz3DPdM5wz3jOdM5wz3TPeM50z3zOeM50z3jPfM54z4DOfM54z3zPgM58z4TOgM58z4DPhM6Az4jOhM6Az4TPiM6Ez4zOiM6Ez4jPjM6Iz5DOjM6Iz4zPkM6Mz5TOkM6Mz5DPlM6Qz5jOlM6Qz5TPmM6Uz5zOmM6Uz5jPnM6Yz6DOnM6Yz5zPoM6cz6TOoM6cz6DPpM6gz6jOpM6gz6TPqM6kz6zOqM6kz6jPrM6oz7DOrM6oz6zPsM6sz7TOsM6sz7DPtM6wz7jOtM6wz7TPuM60z7zOuM60z7jPvM64z8DOvM64z7zPwM68z8TOwM68z8DPxM7Az8jOxM7Az8TPyM7Ez8zOyM7Ez8jPzM7Iz9DOzM7Iz8zP0M7Mz9TO0M7Mz9DP1M7Qz9jO1M7Qz9TP2M7Uz9zO2M7Uz9jP3M7Yz+DO3M7Yz9zP4M7cz+TO4M7cz+DP5M7gz+jO5M7gz+TP6M7kz+zO6M7kz+jP7M7oz/DO7M7oz+zP8M7sz/TO8M7sz/DP9M7wz/jO9M7wz/TP+M70z/zO+M70z/jP/M74zADS/M74z/zMANL8zATTAM78zADQBNMAzAjTBM8AzATQCNMEzAzTCM8EzAjQDNMIzBDTDM8IzAzQENMMzBTTEM8MzBDQFNMQzBjTFM8QzBTQGNMUzBzTGM8UzBjQHNMYzCDTHM8YzBzQINMczCTTIM8czCDQJNMgzCjTJM8gzCTQKNMkzCzTKM8kzCjQLNMozDDTLM8ozCzQMNMwzDjTNM8wzDTQONM0zDzTOM80zDjQPNM4zEDTPM84zDzQQNM8zETTQM88zEDQRNNAzEjTRM9AzETQSNNEzEzTSM9EzEjQTNNIzFDTTM9IzEzQUNNMzFTTUM9MzFDQVNNQzFjTVM9QzFTQWNNUzFzTWM9UzFjQXNNYzGDTXM9YzFzQYNNczGTTYM9czGDQZNNgzGjTZM9gzGTQaNNkzGzTaM9kzGjQbNNozHDTbM9ozGzQcNNszHTTcM9szHDQdNNwzHjTdM9wzHTQeNN0zHzTeM90zHjQfNN4zIDTfM94zHzQgNN8zITTgM98zIDQhNOAzIjThM+AzITQiNOEzIzTiM+EzIjQjNOIzJDTjM+IzIzQkNOMzJTTkM+MzJDQlNOQzJjTlM+QzJTQmNOUzJzTmM+UzJjQnNOYzKDTnM+YzJzQoNOczKTToM+czKDQpNOgzKjTpM+gzKTQqNOkzKzTqM+kzKjQrNOozLDTrM+ozKzQsNOszLTTsM+szLDQtNOwzLjTtM+wzLTQuNO0zLzTuM+0zLjQvNO4zMDTvM+4zLzQwNO8zMTTwM+8zMDQxNPAzMjTxM/AzMTQyNPEzMzTyM/EzMjQzNPIzNDTzM/IzMzQ0NPMzNTT0M/MzNDQ1NPQzNjT1M/QzNTQ2NPUzNzT2M/UzNjQ3NPYzODT3M/YzNzQ4NPczOTT4M/czODQ5NPgzOjT5M/gzOTQ6NPkzOzT6M/kzOjQ7NPozPDT7M/ozOzQ8NPszPTT8M/szPDQ9NPwzPjT9M/wzPTQ+NP0zPzT+M/0zPjQ/NP4zQDT/M/4zPzRANP8zQTQANP8zQDRBNAA0QjQBNAA0QTRCNAE0QzQCNAE0QjRDNAI0RDQDNAI0QzRENAM0RTQENAM0RDRFNAQ0RjQFNAQ0RTRGNAU0RzQGNAU0RjRHNAY0SDQHNAY0RzRINAc0STQINAc0SDRJNAg0SjQJNAg0STRKNAk0SzQKNAk0SjRLNAo0TDQLNAo0SzRMNAs0TTQMNAs0TDRNNA00TzQONA00TjRPNA40UDQPNA40TzRQNA80UTQQNA80UDRRNBA0UjQRNBA0UTRSNBE0UzQSNBE0UjRTNBI0VDQTNBI0UzRUNBM0VTQUNBM0VDRVNBQ0VjQVNBQ0VTRWNBU0VzQWNBU0VjRXNBY0WDQXNBY0VzRYNBc0WTQYNBc0WDRZNBg0WjQZNBg0WTRaNBk0WzQaNBk0WjRbNBo0XDQbNBo0WzRcNBs0XTQcNBs0XDRdNBw0XjQdNBw0XTReNB00XzQeNB00XjRfNB40YDQfNB40XzRgNB80YTQgNB80YDRhNCA0YjQhNCA0YTRiNCE0YzQiNCE0YjRjNCI0ZDQjNCI0YzRkNCM0ZTQkNCM0ZDRlNCQ0ZjQlNCQ0ZTRmNCU0ZzQmNCU0ZjRnNCY0aDQnNCY0ZzRoNCc0aTQoNCc0aDRpNCg0ajQpNCg0aTRqNCk0azQqNCk0ajRrNCo0bDQrNCo0azRsNCs0bTQsNCs0bDRtNCw0bjQtNCw0bTRuNC00bzQuNC00bjRvNC40cDQvNC40bzRwNC80cTQwNC80cDRxNDA0cjQxNDA0cTRyNDE0czQyNDE0cjRzNDI0dDQzNDI0czR0NDM0dTQ0NDM0dDR1NDQ0djQ1NDQ0dTR2NDU0dzQ2NDU0djR3NDY0eDQ3NDY0dzR4NDc0eTQ4NDc0eDR5NDg0ejQ5NDg0eTR6NDk0ezQ6NDk0ejR7NDo0fDQ7NDo0ezR8NDs0fTQ8NDs0fDR9NDw0fjQ9NDw0fTR+ND00fzQ+ND00fjR/ND40gDQ/ND40fzSAND80gTRAND80gDSBNEA0gjRBNEA0gTSCNEE0gzRCNEE0gjSDNEI0hDRDNEI0gzSENEM0hTRENEM0hDSFNEQ0hjRFNEQ0hTSGNEU0hzRGNEU0hjSHNEY0iDRHNEY0hzSINEc0iTRINEc0iDSJNEg0ijRJNEg0iTSKNEk0izRKNEk0ijSLNEo0jDRLNEo0izSMNEs0jTRMNEs0jDSNNEw0jjRNNEw0jTSONE40kDRPNE40jzSQNE80kTRQNE80kDSRNFA0kjRRNFA0kTSSNFE0kzRSNFE0kjSTNFI0lDRTNFI0kzSUNFM0lTRUNFM0lDSVNFQ0ljRVNFQ0lTSWNFU0lzRWNFU0ljSXNFY0mDRXNFY0lzSYNFc0mTRYNFc0mDSZNFg0mjRZNFg0mTSaNFk0mzRaNFk0mjSbNFo0nDRbNFo0mzScNFs0nTRcNFs0nDSdNFw0njRdNFw0nTSeNF00nzReNF00njSfNF40oDRfNF40nzSgNF80oTRgNF80oDShNGA0ojRhNGA0oTSiNGE0ozRiNGE0ojSjNGI0pDRjNGI0ozSkNGM0pTRkNGM0pDSlNGQ0pjRlNGQ0pTSmNGU0pzRmNGU0pjSnNGY0qDRnNGY0pzSoNGc0qTRoNGc0qDSpNGg0qjRpNGg0qTSqNGk0qzRqNGk0qjSrNGo0rDRrNGo0qzSsNGs0rTRsNGs0rDStNGw0rjRtNGw0rTSuNG00rzRuNG00rjSvNG40sDRvNG40rzSwNG80sTRwNG80sDSxNHA0sjRxNHA0sTSyNHE0szRyNHE0sjSzNHI0tDRzNHI0szS0NHM0tTR0NHM0tDS1NHQ0tjR1NHQ0tTS2NHU0tzR2NHU0tjS3NHY0uDR3NHY0tzS4NHc0uTR4NHc0uDS5NHg0ujR5NHg0uTS6NHk0uzR6NHk0ujS7NHo0vDR7NHo0uzS8NHs0vTR8NHs0vDS9NHw0vjR9NHw0vTS+NH00vzR+NH00vjS/NH40wDR/NH40vzTANH80wTSANH80wDTBNIA0wjSBNIA0wTTCNIE0wzSCNIE0wjTDNII0xDSDNII0wzTENIM0xTSENIM0xDTFNIQ0xjSFNIQ0xTTGNIU0xzSGNIU0xjTHNIY0yDSHNIY0xzTINIc0yTSINIc0yDTJNIg0yjSJNIg0yTTKNIk0yzSKNIk0yjTLNIo0zDSLNIo0yzTMNIs0zTSMNIs0zDTNNIw0zjSNNIw0zTTONI00zzSONI00zjTPNI800TSQNI800DTRNJA00jSRNJA00TTSNJE00zSSNJE00jTTNJI01DSTNJI00zTUNJM01TSUNJM01DTVNJQ01jSVNJQ01TTWNJU01zSWNJU01jTXNJY02DSXNJY01zTYNJc02TSYNJc02DTZNJg02jSZNJg02TTaNJk02zSaNJk02jTbNJo03DSbNJo02zTcNJs03TScNJs03DTdNJw03jSdNJw03TTeNJ003zSeNJ003jTfNJ404DSfNJ403zTgNJ804TSgNJ804DThNKA04jShNKA04TTiNKE04zSiNKE04jTjNKI05DSjNKI04zTkNKM05TSkNKM05DTlNKQ05jSlNKQ05TTmNKU05zSmNKU05jTnNKY06DSnNKY05zToNKc06TSoNKc06DTpNKg06jSpNKg06TTqNKk06zSqNKk06jTrNKo07DSrNKo06zTsNKs07TSsNKs07DTtNKw07jStNKw07TTuNK007zSuNK007jTvNK408DSvNK407zTwNK808TSwNK808DTxNLA08jSxNLA08TTyNLE08zSyNLE08jTzNLI09DSzNLI08zT0NLM09TS0NLM09DT1NLQ09jS1NLQ09TT2NLU09zS2NLU09jT3NLY0+DS3NLY09zT4NLc0+TS4NLc0+DT5NLg0+jS5NLg0+TT6NLk0+zS6NLk0+jT7NLo0/DS7NLo0+zT8NLs0/TS8NLs0/DT9NLw0/jS9NLw0/TT+NL00/zS+NL00/jT/NL40ADW/NL40/zQANb80ATXANL80ADUBNcA0AjXBNMA0ATUCNcE0AzXCNME0AjUDNcI0BDXDNMI0AzUENcM0BTXENMM0BDUFNcQ0BjXFNMQ0BTUGNcU0BzXGNMU0BjUHNcY0CDXHNMY0BzUINcc0CTXINMc0CDUJNcg0CjXJNMg0CTUKNck0CzXKNMk0CjULNco0DDXLNMo0CzUMNcs0DTXMNMs0DDUNNcw0DjXNNMw0DTUONc00DzXONM00DjUPNc40EDXPNM40DzUQNdA0EjXRNNA0ETUSNdE0EzXSNNE0EjUTNdI0FDXTNNI0EzUUNdM0FTXUNNM0FDUVNdQ0FjXVNNQ0FTUWNdU0FzXWNNU0FjUXNdY0GDXXNNY0FzUYNdc0GTXYNNc0GDUZNdg0GjXZNNg0GTUaNdk0GzXaNNk0GjUbNdo0HDXbNNo0GzUcNds0HTXcNNs0HDUdNdw0HjXdNNw0HTUeNd00HzXeNN00HjUfNd40IDXfNN40HzUgNd80ITXgNN80IDUhNeA0IjXhNOA0ITUiNeE0IzXiNOE0IjUjNeI0JDXjNOI0IzUkNeM0JTXkNOM0JDUlNeQ0JjXlNOQ0JTUmNeU0JzXmNOU0JjUnNeY0KDXnNOY0JzUoNec0KTXoNOc0KDUpNeg0KjXpNOg0KTUqNek0KzXqNOk0KjUrNeo0LDXrNOo0KzUsNes0LTXsNOs0LDUtNew0LjXtNOw0LTUuNe00LzXuNO00LjUvNe40MDXvNO40LzUwNe80MTXwNO80MDUxNfA0MjXxNPA0MTUyNfE0MzXyNPE0MjUzNfI0NDXzNPI0MzU0NfM0NTX0NPM0NDU1NfQ0NjX1NPQ0NTU2NfU0NzX2NPU0NjU3NfY0ODX3NPY0NzU4Nfc0OTX4NPc0ODU5Nfg0OjX5NPg0OTU6Nfk0OzX6NPk0OjU7Nfo0PDX7NPo0OzU8Nfs0PTX8NPs0PDU9Nfw0PjX9NPw0PTU+Nf00PzX+NP00PjU/Nf40QDX/NP40PzVANf80QTUANf80QDVBNQA1QjUBNQA1QTVCNQE1QzUCNQE1QjVDNQI1RDUDNQI1QzVENQM1RTUENQM1RDVFNQQ1RjUFNQQ1RTVGNQU1RzUGNQU1RjVHNQY1SDUHNQY1RzVINQc1STUINQc1SDVJNQg1SjUJNQg1STVKNQk1SzUKNQk1SjVLNQo1TDULNQo1SzVMNQs1TTUMNQs1TDVNNQw1TjUNNQw1TTVONQ01TzUONQ01TjVPNQ41UDUPNQ41TzVQNQ81UTUQNQ81UDVRNRE1UzUSNRE1UjVTNRI1VDUTNRI1UzVUNRM1VTUUNRM1VDVVNRQ1VjUVNRQ1VTVWNRU1VzUWNRU1VjVXNRY1WDUXNRY1VzVYNRc1WTUYNRc1WDVZNRg1WjUZNRg1WTVaNRk1WzUaNRk1WjVbNRo1XDUbNRo1WzVcNRs1XTUcNRs1XDVdNRw1XjUdNRw1XTVeNR01XzUeNR01XjVfNR41YDUfNR41XzVgNR81YTUgNR81YDVhNSA1YjUhNSA1YTViNSE1YzUiNSE1YjVjNSI1ZDUjNSI1YzVkNSM1ZTUkNSM1ZDVlNSQ1ZjUlNSQ1ZTVmNSU1ZzUmNSU1ZjVnNSY1aDUnNSY1ZzVoNSc1aTUoNSc1aDVpNSg1ajUpNSg1aTVqNSk1azUqNSk1ajVrNSo1bDUrNSo1azVsNSs1bTUsNSs1bDVtNSw1bjUtNSw1bTVuNS01bzUuNS01bjVvNS41cDUvNS41bzVwNS81cTUwNS81cDVxNTA1cjUxNTA1cTVyNTE1czUyNTE1cjVzNTI1dDUzNTI1czV0NTM1dTU0NTM1dDV1NTQ1djU1NTQ1dTV2NTU1dzU2NTU1djV3NTY1eDU3NTY1dzV4NTc1eTU4NTc1eDV5NTg1ejU5NTg1eTV6NTk1ezU6NTk1ejV7NTo1fDU7NTo1ezV8NTs1fTU8NTs1fDV9NTw1fjU9NTw1fTV+NT01fzU+NT01fjV/NT41gDU/NT41fzWANT81gTVANT81gDWBNUA1gjVBNUA1gTWCNUE1gzVCNUE1gjWDNUI1hDVDNUI1gzWENUM1hTVENUM1hDWFNUQ1hjVFNUQ1hTWGNUU1hzVGNUU1hjWHNUY1iDVHNUY1hzWINUc1iTVINUc1iDWJNUg1ijVJNUg1iTWKNUk1izVKNUk1ijWLNUo1jDVLNUo1izWMNUs1jTVMNUs1jDWNNUw1jjVNNUw1jTWONU01jzVONU01jjWPNU41kDVPNU41jzWQNU81kTVQNU81kDWRNVA1kjVRNVA1kTWSNVI1lDVTNVI1kzWUNVM1lTVUNVM1lDWVNVQ1ljVVNVQ1lTWWNVU1lzVWNVU1ljWXNVY1mDVXNVY1lzWYNVc1mTVYNVc1mDWZNVg1mjVZNVg1mTWaNVk1mzVaNVk1mjWbNVo1nDVbNVo1mzWcNVs1nTVcNVs1nDWdNVw1njVdNVw1nTWeNV01nzVeNV01njWfNV41oDVfNV41nzWgNV81oTVgNV81oDWhNWA1ojVhNWA1oTWiNWE1ozViNWE1ojWjNWI1pDVjNWI1ozWkNWM1pTVkNWM1pDWlNWQ1pjVlNWQ1pTWmNWU1pzVmNWU1pjWnNWY1qDVnNWY1pzWoNWc1qTVoNWc1qDWpNWg1qjVpNWg1qTWqNWk1qzVqNWk1qjWrNWo1rDVrNWo1qzWsNWs1rTVsNWs1rDWtNWw1rjVtNWw1rTWuNW01rzVuNW01rjWvNW41sDVvNW41rzWwNW81sTVwNW81sDWxNXA1sjVxNXA1sTWyNXE1szVyNXE1sjWzNXI1tDVzNXI1szW0NXM1tTV0NXM1tDW1NXQ1tjV1NXQ1tTW2NXU1tzV2NXU1tjW3NXY1uDV3NXY1tzW4NXc1uTV4NXc1uDW5NXg1ujV5NXg1uTW6NXk1uzV6NXk1ujW7NXo1vDV7NXo1uzW8NXs1vTV8NXs1vDW9NXw1vjV9NXw1vTW+NX01vzV+NX01vjW/NX41wDV/NX41vzXANX81wTWANX81wDXBNYA1wjWBNYA1wTXCNYE1wzWCNYE1wjXDNYI1xDWDNYI1wzXENYM1xTWENYM1xDXFNYQ1xjWFNYQ1xTXGNYU1xzWGNYU1xjXHNYY1yDWHNYY1xzXINYc1yTWINYc1yDXJNYg1yjWJNYg1yTXKNYk1yzWKNYk1yjXLNYo1zDWLNYo1yzXMNYs1zTWMNYs1zDXNNYw1zjWNNYw1zTXONY01zzWONY01zjXPNY410DWPNY41zzXQNY810TWQNY810DXRNZA10jWRNZA10TXSNZE10zWSNZE10jXTNZM11TWUNZM11DXVNZQ11jWVNZQ11TXWNZU11zWWNZU11jXXNZY12DWXNZY11zXYNZc12TWYNZc12DXZNZg12jWZNZg12TXaNZk12zWaNZk12jXbNZo13DWbNZo12zXcNZs13TWcNZs13DXdNZw13jWdNZw13TXeNZ013zWeNZ013jXfNZ414DWfNZ413zXgNZ814TWgNZ814DXhNaA14jWhNaA14TXiNaE14zWiNaE14jXjNaI15DWjNaI14zXkNaM15TWkNaM15DXlNaQ15jWlNaQ15TXmNaU15zWmNaU15jXnNaY16DWnNaY15zXoNac16TWoNac16DXpNag16jWpNag16TXqNak16zWqNak16jXrNao17DWrNao16zXsNas17TWsNas17DXtNaw17jWtNaw17TXuNa017zWuNa017jXvNa418DWvNa417zXwNa818TWwNa818DXxNbA18jWxNbA18TXyNbE18zWyNbE18jXzNbI19DWzNbI18zX0NbM19TW0NbM19DX1NbQ19jW1NbQ19TX2NbU19zW2NbU19jX3NbY1+DW3NbY19zX4Nbc1+TW4Nbc1+DX5Nbg1+jW5Nbg1+TX6Nbk1+zW6Nbk1+jX7Nbo1/DW7Nbo1+zX8Nbs1/TW8Nbs1/DX9Nbw1/jW9Nbw1/TX+Nb01/zW+Nb01/jX/Nb41ADa/Nb41/zUANr81ATbANb81ADYBNsA1AjbBNcA1ATYCNsE1AzbCNcE1AjYDNsI1BDbDNcI1AzYENsM1BTbENcM1BDYFNsQ1BjbFNcQ1BTYGNsU1BzbGNcU1BjYHNsY1CDbHNcY1BzYINsc1CTbINcc1CDYJNsg1CjbJNcg1CTYKNsk1CzbKNck1CjYLNso1DDbLNco1CzYMNss1DTbMNcs1DDYNNsw1DjbNNcw1DTYONs01DzbONc01DjYPNs41EDbPNc41DzYQNs81ETbQNc81EDYRNtA1EjbRNdA1ETYSNtE1EzbSNdE1EjYTNtI1FDbTNdI1EzYUNtQ1FjbVNdQ1FTYWNtU1FzbWNdU1FjYXNtY1GDbXNdY1FzYYNtc1GTbYNdc1GDYZNtg1GjbZNdg1GTYaNtk1GzbaNdk1GjYbNto1HDbbNdo1GzYcNts1HTbcNds1HDYdNtw1HjbdNdw1HTYeNt01HzbeNd01HjYfNt41IDbfNd41HzYgNt81ITbgNd81IDYhNuA1IjbhNeA1ITYiNuE1IzbiNeE1IjYjNuI1JDbjNeI1IzYkNuM1JTbkNeM1JDYlNuQ1JjblNeQ1JTYmNuU1JzbmNeU1JjYnNuY1KDbnNeY1JzYoNuc1KTboNec1KDYpNug1KjbpNeg1KTYqNuk1KzbqNek1KjYrNuo1LDbrNeo1KzYsNus1LTbsNes1LDYtNuw1LjbtNew1LTYuNu01LzbuNe01LjYvNu41MDbvNe41LzYwNu81MTbwNe81MDYxNvA1MjbxNfA1MTYyNvE1MzbyNfE1MjYzNvI1NDbzNfI1MzY0NvM1NTb0NfM1NDY1NvQ1Njb1NfQ1NTY2NvU1Nzb2NfU1NjY3NvY1ODb3NfY1NzY4Nvc1OTb4Nfc1ODY5Nvg1Ojb5Nfg1OTY6Nvk1Ozb6Nfk1OjY7Nvo1PDb7Nfo1OzY8Nvs1PTb8Nfs1PDY9Nvw1Pjb9Nfw1PTY+Nv01Pzb+Nf01PjY/Nv41QDb/Nf41PzZANv81QTYANv81QDZBNgA2QjYBNgA2QTZCNgE2QzYCNgE2QjZDNgI2RDYDNgI2QzZENgM2RTYENgM2RDZFNgQ2RjYFNgQ2RTZGNgU2RzYGNgU2RjZHNgY2SDYHNgY2RzZINgc2STYINgc2SDZJNgg2SjYJNgg2STZKNgk2SzYKNgk2SjZLNgo2TDYLNgo2SzZMNgs2TTYMNgs2TDZNNgw2TjYNNgw2TTZONg02TzYONg02TjZPNg42UDYPNg42TzZQNg82UTYQNg82UDZRNhA2UjYRNhA2UTZSNhE2UzYSNhE2UjZTNhI2VDYTNhI2UzZUNhM2VTYUNhM2VDZVNhU2VzYWNhU2VjZXNhY2WDYXNhY2VzZYNhc2WTYYNhc2WDZZNhg2WjYZNhg2WTZaNhk2WzYaNhk2WjZbNho2XDYbNho2WzZcNhs2XTYcNhs2XDZdNhw2XjYdNhw2XTZeNh02XzYeNh02XjZfNh42YDYfNh42XzZgNh82YTYgNh82YDZhNiA2YjYhNiA2YTZiNiE2YzYiNiE2YjZjNiI2ZDYjNiI2YzZkNiM2ZTYkNiM2ZDZlNiQ2ZjYlNiQ2ZTZmNiU2ZzYmNiU2ZjZnNiY2aDYnNiY2ZzZoNic2aTYoNic2aDZpNig2ajYpNig2aTZqNik2azYqNik2ajZrNio2bDYrNio2azZsNis2bTYsNis2bDZtNiw2bjYtNiw2bTZuNi02bzYuNi02bjZvNi42cDYvNi42bzZwNi82cTYwNi82cDZxNjA2cjYxNjA2cTZyNjE2czYyNjE2cjZzNjI2dDYzNjI2czZ0NjM2dTY0NjM2dDZ1NjQ2djY1NjQ2dTZ2NjU2dzY2NjU2djZ3NjY2eDY3NjY2dzZ4Njc2eTY4Njc2eDZ5Njg2ejY5Njg2eTZ6Njk2ezY6Njk2ejZ7Njo2fDY7Njo2ezZ8Njs2fTY8Njs2fDZ9Njw2fjY9Njw2fTZ+Nj02fzY+Nj02fjZ/Nj42gDY/Nj42fzaANj82gTZANj82gDaBNkA2gjZBNkA2gTaCNkE2gzZCNkE2gjaDNkI2hDZDNkI2gzaENkM2hTZENkM2hDaFNkQ2hjZFNkQ2hTaGNkU2hzZGNkU2hjaHNkY2iDZHNkY2hzaINkc2iTZINkc2iDaJNkg2ijZJNkg2iTaKNkk2izZKNkk2ijaLNko2jDZLNko2izaMNks2jTZMNks2jDaNNkw2jjZNNkw2jTaONk02jzZONk02jjaPNk42kDZPNk42jzaQNk82kTZQNk82kDaRNlA2kjZRNlA2kTaSNlE2kzZSNlE2kjaTNlI2lDZTNlI2kzaUNlM2lTZUNlM2lDaVNlQ2ljZVNlQ2lTaWNlY2mDZXNlY2lzaYNlc2mTZYNlc2mDaZNlg2mjZZNlg2mTaaNlk2mzZaNlk2mjabNlo2nDZbNlo2mzacNls2nTZcNls2nDadNlw2njZdNlw2nTaeNl02nzZeNl02njafNl42oDZfNl42nzagNl82oTZgNl82oDahNmA2ojZhNmA2oTaiNmE2ozZiNmE2ojajNmI2pDZjNmI2ozakNmM2pTZkNmM2pDalNmQ2pjZlNmQ2pTamNmU2pzZmNmU2pjanNmY2qDZnNmY2pzaoNmc2qTZoNmc2qDapNmg2qjZpNmg2qTaqNmk2qzZqNmk2qjarNmo2rDZrNmo2qzasNms2rTZsNms2rDatNmw2rjZtNmw2rTauNm02rzZuNm02rjavNm42sDZvNm42rzawNm82sTZwNm82sDaxNnA2sjZxNnA2sTayNnE2szZyNnE2sjazNnI2tDZzNnI2sza0NnM2tTZ0NnM2tDa1NnQ2tjZ1NnQ2tTa2NnU2tzZ2NnU2tja3NnY2uDZ3NnY2tza4Nnc2uTZ4Nnc2uDa5Nng2ujZ5Nng2uTa6Nnk2uzZ6Nnk2uja7Nno2vDZ7Nno2uza8Nns2vTZ8Nns2vDa9Nnw2vjZ9Nnw2vTa+Nn02vzZ+Nn02vja/Nn42wDZ/Nn42vzbANn82wTaANn82wDbBNoA2wjaBNoA2wTbCNoE2wzaCNoE2wjbDNoI2xDaDNoI2wzbENoM2xTaENoM2xDbFNoQ2xjaFNoQ2xTbGNoU2xzaGNoU2xjbHNoY2yDaHNoY2xzbINoc2yTaINoc2yDbJNog2yjaJNog2yTbKNok2yzaKNok2yjbLNoo2zDaLNoo2yzbMNos2zTaMNos2zDbNNow2zjaNNow2zTbONo02zzaONo02zjbPNo420DaPNo42zzbQNo820TaQNo820DbRNpA20jaRNpA20TbSNpE20zaSNpE20jbTNpI21DaTNpI20zbUNpM21TaUNpM21DbVNpQ21jaVNpQ21TbWNpU21zaWNpU21jbXNpc22TaYNpc22DbZNpg22jaZNpg22TbaNpk22zaaNpk22jbbNpo23DabNpo22zbcNps23TacNps23DbdNpw23jadNpw23TbeNp023zaeNp023jbfNp424DafNp423zbgNp824TagNp824DbhNqA24jahNqA24TbiNqE24zaiNqE24jbjNqI25DajNqI24zbkNqM25TakNqM25DblNqQ25jalNqQ25TbmNqU25zamNqU25jbnNqY26DanNqY25zboNqc26TaoNqc26DbpNqg26japNqg26TbqNqk26zaqNqk26jbrNqo27DarNqo26zbsNqs27TasNqs27DbtNqw27jatNqw27TbuNq027zauNq027jbvNq428DavNq427zbwNq828TawNq828DbxNrA28jaxNrA28TbyNrE28zayNrE28jbzNrI29DazNrI28zb0NrM29Ta0NrM29Db1NrQ29ja1NrQ29Tb2NrU29za2NrU29jb3NrY2+Da3NrY29zb4Nrc2+Ta4Nrc2+Db5Nrg2+ja5Nrg2+Tb6Nrk2+za6Nrk2+jb7Nro2/Da7Nro2+zb8Nrs2/Ta8Nrs2/Db9Nrw2/ja9Nrw2/Tb+Nr02/za+Nr02/jb/Nr42ADe/Nr42/zYAN782ATfANr82ADcBN8A2AjfBNsA2ATcCN8E2AzfCNsE2AjcDN8I2BDfDNsI2AzcEN8M2BTfENsM2BDcFN8Q2BjfFNsQ2BTcGN8U2BzfGNsU2BjcHN8Y2CDfHNsY2BzcIN8c2CTfINsc2CDcJN8g2CjfJNsg2CTcKN8k2CzfKNsk2CjcLN8o2DDfLNso2CzcMN8s2DTfMNss2DDcNN8w2DjfNNsw2DTcON802DzfONs02DjcPN842EDfPNs42DzcQN882ETfQNs82EDcRN9A2EjfRNtA2ETcSN9E2EzfSNtE2EjcTN9I2FDfTNtI2EzcUN9M2FTfUNtM2FDcVN9Q2FjfVNtQ2FTcWN9U2FzfWNtU2FjcXN9Y2GDfXNtY2FzcYN9g2GjfZNtg2GTcaN9k2GzfaNtk2GjcbN9o2HDfbNto2GzccN9s2HTfcNts2HDcdN9w2HjfdNtw2HTceN902HzfeNt02HjcfN942IDffNt42HzcgN982ITfgNt82IDchN+A2IjfhNuA2ITciN+E2IzfiNuE2IjcjN+I2JDfjNuI2IzckN+M2JTfkNuM2JDclN+Q2JjflNuQ2JTcmN+U2JzfmNuU2JjcnN+Y2KDfnNuY2JzcoN+c2KTfoNuc2KDcpN+g2KjfpNug2KTcqN+k2KzfqNuk2KjcrN+o2LDfrNuo2KzcsN+s2LTfsNus2LDctN+w2LjftNuw2LTcuN+02LzfuNu02LjcvN+42MDfvNu42LzcwN+82MTfwNu82MDcxN/A2MjfxNvA2MTcyN/E2MzfyNvE2MjczN/I2NDfzNvI2Mzc0N/M2NTf0NvM2NDc1N/Q2Njf1NvQ2NTc2N/U2Nzf2NvU2Njc3N/Y2ODf3NvY2Nzc4N/c2OTf4Nvc2ODc5N/g2Ojf5Nvg2OTc6N/k2Ozf6Nvk2Ojc7N/o2PDf7Nvo2Ozc8N/s2PTf8Nvs2PDc9N/w2Pjf9Nvw2PTc+N/02Pzf+Nv02Pjc/N/42QDf/Nv42PzdAN/82QTcAN/82QDdBNwA3QjcBNwA3QTdCNwE3QzcCNwE3QjdDNwI3RDcDNwI3QzdENwM3RTcENwM3RDdFNwQ3RjcFNwQ3RTdGNwU3RzcGNwU3RjdHNwY3SDcHNwY3RzdINwc3STcINwc3SDdJNwg3SjcJNwg3STdKNwk3SzcKNwk3SjdLNwo3TDcLNwo3SzdMNws3TTcMNws3TDdNNww3TjcNNww3TTdONw03TzcONw03TjdPNw43UDcPNw43TzdQNw83UTcQNw83UDdRNxA3UjcRNxA3UTdSNxE3UzcSNxE3UjdTNxI3VDcTNxI3UzdUNxM3VTcUNxM3VDdVNxQ3VjcVNxQ3VTdWNxU3VzcWNxU3VjdXNxY3WDcXNxY3VzdYNxc3WTcYNxc3WDdZNxk3WzcaNxk3WjdbNxo3XDcbNxo3WzdcNxs3XTccNxs3XDddNxw3XjcdNxw3XTdeNx03XzceNx03XjdfNx43YDcfNx43XzdgNx83YTcgNx83YDdhNyA3YjchNyA3YTdiNyE3YzciNyE3YjdjNyI3ZDcjNyI3YzdkNyM3ZTckNyM3ZDdlNyQ3ZjclNyQ3ZTdmNyU3ZzcmNyU3ZjdnNyY3aDcnNyY3ZzdoNyc3aTcoNyc3aDdpNyg3ajcpNyg3aTdqNyk3azcqNyk3ajdrNyo3bDcrNyo3azdsNys3bTcsNys3bDdtNyw3bjctNyw3bTduNy03bzcuNy03bjdvNy43cDcvNy43bzdwNy83cTcwNy83cDdxNzA3cjcxNzA3cTdyNzE3czcyNzE3cjdzNzI3dDczNzI3czd0NzM3dTc0NzM3dDd1NzQ3djc1NzQ3dTd2NzU3dzc2NzU3djd3NzY3eDc3NzY3dzd4Nzc3eTc4Nzc3eDd5Nzg3ejc5Nzg3eTd6Nzk3ezc6Nzk3ejd7Nzo3fDc7Nzo3ezd8Nzs3fTc8Nzs3fDd9Nzw3fjc9Nzw3fTd+Nz03fzc+Nz03fjd/Nz43gDc/Nz43fzeANz83gTdANz83gDeBN0A3gjdBN0A3gTeCN0E3gzdCN0E3gjeDN0I3hDdDN0I3gzeEN0M3hTdEN0M3hDeFN0Q3hjdFN0Q3hTeGN0U3hzdGN0U3hjeHN0Y3iDdHN0Y3hzeIN0c3iTdIN0c3iDeJN0g3ijdJN0g3iTeKN0k3izdKN0k3ijeLN0o3jDdLN0o3izeMN0s3jTdMN0s3jDeNN0w3jjdNN0w3jTeON003jzdON003jjePN043kDdPN043jzeQN083kTdQN083kDeRN1A3kjdRN1A3kTeSN1E3kzdSN1E3kjeTN1I3lDdTN1I3kzeUN1M3lTdUN1M3lDeVN1Q3ljdVN1Q3lTeWN1U3lzdWN1U3ljeXN1Y3mDdXN1Y3lzeYN1c3mTdYN1c3mDeZN1g3mjdZN1g3mTeaN1o3nDdbN1o3mzecN1s3nTdcN1s3nDedN1w3njddN1w3nTeeN103nzdeN103njefN143oDdfN143nzegN183oTdgN183oDehN2A3ojdhN2A3oTeiN2E3ozdiN2E3ojejN2I3pDdjN2I3ozekN2M3pTdkN2M3pDelN2Q3pjdlN2Q3pTemN2U3pzdmN2U3pjenN2Y3qDdnN2Y3pzeoN2c3qTdoN2c3qDepN2g3qjdpN2g3qTeqN2k3qzdqN2k3qjerN2o3rDdrN2o3qzesN2s3rTdsN2s3rDetN2w3rjdtN2w3rTeuN203rzduN203rjevN243sDdvN243rzewN283sTdwN283sDexN3A3sjdxN3A3sTeyN3E3szdyN3E3sjezN3I3tDdzN3I3sze0N3M3tTd0N3M3tDe1N3Q3tjd1N3Q3tTe2N3U3tzd2N3U3tje3N3Y3uDd3N3Y3tze4N3c3uTd4N3c3uDe5N3g3ujd5N3g3uTe6N3k3uzd6N3k3uje7N3o3vDd7N3o3uze8N3s3vTd8N3s3vDe9N3w3vjd9N3w3vTe+N303vzd+N303vje/N343wDd/N343vzfAN383wTeAN383wDfBN4A3wjeBN4A3wTfCN4E3wzeCN4E3wjfDN4I3xDeDN4I3wzfEN4M3xTeEN4M3xDfFN4Q3xjeFN4Q3xTfGN4U3xzeGN4U3xjfHN4Y3yDeHN4Y3xzfIN4c3yTeIN4c3yDfJN4g3yjeJN4g3yTfKN4k3yzeKN4k3yjfLN4o3zDeLN4o3yzfMN4s3zTeMN4s3zDfNN4w3zjeNN4w3zTfON403zzeON403zjfPN4430DePN443zzfQN4830TeQN4830DfRN5A30jeRN5A30TfSN5E30zeSN5E30jfTN5I31DeTN5I30zfUN5M31TeUN5M31DfVN5Q31jeVN5Q31TfWN5U31zeWN5U31jfXN5Y32DeXN5Y31zfYN5c32TeYN5c32DfZN5g32jeZN5g32TfaN5k32zeaN5k32jfbN5s33TecN5s33DfdN5w33jedN5w33TfeN5033zeeN5033jffN5434DefN5433zfgN5834TegN5834DfhN6A34jehN6A34TfiN6E34zeiN6E34jfjN6I35DejN6I34zfkN6M35TekN6M35DflN6Q35jelN6Q35TfmN6U35zemN6U35jfnN6Y36DenN6Y35zfoN6c36TeoN6c36DfpN6g36jepN6g36TfqN6k36zeqN6k36jfrN6o37DerN6o36zfsN6s37TesN6s37DftN6w37jetN6w37TfuN6037zeuN6037jfvN6438DevN6437zfwN6838TewN6838DfxN7A38jexN7A38TfyN7E38zeyN7E38jfzN7I39DezN7I38zf0N7M39Te0N7M39Df1N7Q39je1N7Q39Tf2N7U39ze2N7U39jf3N7Y3+De3N7Y39zf4N7c3+Te4N7c3+Df5N7g3+je5N7g3+Tf6N7k3+ze6N7k3+jf7N7o3/De7N7o3+zf8N7s3/Te8N7s3/Df9N7w3/je9N7w3/Tf+N703/ze+N703/jf/N743ADi/N743/zcAOL83ATjAN783ADgBOMA3AjjBN8A3ATgCOME3AzjCN8E3AjgDOMI3BDjDN8I3AzgEOMM3BTjEN8M3BDgFOMQ3BjjFN8Q3BTgGOMU3BzjGN8U3BjgHOMY3CDjHN8Y3BzgIOMc3CTjIN8c3CDgJOMg3CjjJN8g3CTgKOMk3CzjKN8k3CjgLOMo3DDjLN8o3CzgMOMs3DTjMN8s3DDgNOMw3DjjNN8w3DTgOOM03DzjON803DjgPOM43EDjPN843DzgQOM83ETjQN883EDgRONA3EjjRN9A3ETgSONE3EzjSN9E3EjgTONI3FDjTN9I3EzgUONM3FTjUN9M3FDgVONQ3FjjVN9Q3FTgWONU3FzjWN9U3FjgXONY3GDjXN9Y3FzgYONc3GTjYN9c3GDgZONg3GjjZN9g3GTgaONk3GzjaN9k3GjgbONo3HDjbN9o3GzgcONw3HjjdN9w3HTgeON03HzjeN903HjgfON43IDjfN943HzggON83ITjgN983IDghOOA3IjjhN+A3ITgiOOE3IzjiN+E3IjgjOOI3JDjjN+I3IzgkOOM3JTjkN+M3JDglOOQ3JjjlN+Q3JTgmOOU3JzjmN+U3JjgnOOY3KDjnN+Y3JzgoOOc3KTjoN+c3KDgpOOg3KjjpN+g3KTgqOOk3KzjqN+k3KjgrOOo3LDjrN+o3KzgsOOs3LTjsN+s3LDgtOOw3LjjtN+w3LTguOO03LzjuN+03LjgvOO43MDjvN+43LzgwOO83MTjwN+83MDgxOPA3MjjxN/A3MTgyOPE3MzjyN/E3MjgzOPI3NDjzN/I3Mzg0OPM3NTj0N/M3NDg1OPQ3Njj1N/Q3NTg2OPU3Nzj2N/U3Njg3OPY3ODj3N/Y3Nzg4OPc3OTj4N/c3ODg5OPg3Ojj5N/g3OTg6OPk3Ozj6N/k3Ojg7OPo3PDj7N/o3Ozg8OPs3PTj8N/s3PDg9OPw3Pjj9N/w3PTg+OP03Pzj+N/03Pjg/OP43QDj/N/43PzhAOP83QTgAOP83QDhBOAA4QjgBOAA4QThCOAE4QzgCOAE4QjhDOAI4RDgDOAI4QzhEOAM4RTgEOAM4RDhFOAQ4RjgFOAQ4RThGOAU4RzgGOAU4RjhHOAY4SDgHOAY4RzhIOAc4STgIOAc4SDhJOAg4SjgJOAg4SThKOAk4SzgKOAk4SjhLOAo4TDgLOAo4SzhMOAs4TTgMOAs4TDhNOAw4TjgNOAw4TThOOA04TzgOOA04TjhPOA44UDgPOA44TzhQOA84UTgQOA84UDhROBA4UjgROBA4UThSOBE4UzgSOBE4UjhTOBI4VDgTOBI4UzhUOBM4VTgUOBM4VDhVOBQ4VjgVOBQ4VThWOBU4VzgWOBU4VjhXOBY4WDgXOBY4VzhYOBc4WTgYOBc4WDhZOBg4WjgZOBg4WThaOBk4WzgaOBk4WjhbOBo4XDgbOBo4WzhcOBs4XTgcOBs4XDhdOB04XzgeOB04XjhfOB44YDgfOB44XzhgOB84YTggOB84YDhhOCA4YjghOCA4YThiOCE4YzgiOCE4YjhjOCI4ZDgjOCI4YzhkOCM4ZTgkOCM4ZDhlOCQ4ZjglOCQ4ZThmOCU4ZzgmOCU4ZjhnOCY4aDgnOCY4ZzhoOCc4aTgoOCc4aDhpOCg4ajgpOCg4aThqOCk4azgqOCk4ajhrOCo4bDgrOCo4azhsOCs4bTgsOCs4bDhtOCw4bjgtOCw4bThuOC04bzguOC04bjhvOC44cDgvOC44bzhwOC84cTgwOC84cDhxODA4cjgxODA4cThyODE4czgyODE4cjhzODI4dDgzODI4czh0ODM4dTg0ODM4dDh1ODQ4djg1ODQ4dTh2ODU4dzg2ODU4djh3ODY4eDg3ODY4dzh4ODc4eTg4ODc4eDh5ODg4ejg5ODg4eTh6ODk4ezg6ODk4ejh7ODo4fDg7ODo4ezh8ODs4fTg8ODs4fDh9ODw4fjg9ODw4fTh+OD04fzg+OD04fjh/OD44gDg/OD44fziAOD84gThAOD84gDiBOEA4gjhBOEA4gTiCOEE4gzhCOEE4gjiDOEI4hDhDOEI4gziEOEM4hThEOEM4hDiFOEQ4hjhFOEQ4hTiGOEU4hzhGOEU4hjiHOEY4iDhHOEY4hziIOEc4iThIOEc4iDiJOEg4ijhJOEg4iTiKOEk4izhKOEk4ijiLOEo4jDhLOEo4iziMOEs4jThMOEs4jDiNOEw4jjhNOEw4jTiOOE04jzhOOE04jjiPOE44kDhPOE44jziQOE84kThQOE84kDiROFA4kjhROFA4kTiSOFE4kzhSOFE4kjiTOFI4lDhTOFI4kziUOFM4lThUOFM4lDiVOFQ4ljhVOFQ4lTiWOFU4lzhWOFU4ljiXOFY4mDhXOFY4lziYOFc4mThYOFc4mDiZOFg4mjhZOFg4mTiaOFk4mzhaOFk4mjibOFo4nDhbOFo4mzicOFs4nThcOFs4nDidOFw4njhdOFw4nTieOF44oDhfOF44nzigOF84oThgOF84oDihOGA4ojhhOGA4oTiiOGE4ozhiOGE4ojijOGI4pDhjOGI4ozikOGM4pThkOGM4pDilOGQ4pjhlOGQ4pTimOGU4pzhmOGU4pjinOGY4qDhnOGY4pzioOGc4qThoOGc4qDipOGg4qjhpOGg4qTiqOGk4qzhqOGk4qjirOGo4rDhrOGo4qzisOGs4rThsOGs4rDitOGw4rjhtOGw4rTiuOG04rzhuOG04rjivOG44sDhvOG44rziwOG84sThwOG84sDixOHA4sjhxOHA4sTiyOHE4szhyOHE4sjizOHI4tDhzOHI4szi0OHM4tTh0OHM4tDi1OHQ4tjh1OHQ4tTi2OHU4tzh2OHU4tji3OHY4uDh3OHY4tzi4OHc4uTh4OHc4uDi5OHg4ujh5OHg4uTi6OHk4uzh6OHk4uji7OHo4vDh7OHo4uzi8OHs4vTh8OHs4vDi9OHw4vjh9OHw4vTi+OH04vzh+OH04vji/OH44wDh/OH44vzjAOH84wTiAOH84wDjBOIA4wjiBOIA4wTjCOIE4wziCOIE4wjjDOII4xDiDOII4wzjEOIM4xTiEOIM4xDjFOIQ4xjiFOIQ4xTjGOIU4xziGOIU4xjjHOIY4yDiHOIY4xzjIOIc4yTiIOIc4yDjJOIg4yjiJOIg4yTjKOIk4yziKOIk4yjjLOIo4zDiLOIo4yzjMOIs4zTiMOIs4zDjNOIw4zjiNOIw4zTjOOI04zziOOI04zjjPOI440DiPOI44zzjQOI840TiQOI840DjROJA40jiROJA40TjSOJE40ziSOJE40jjTOJI41DiTOJI40zjUOJM41TiUOJM41DjVOJQ41jiVOJQ41TjWOJU41ziWOJU41jjXOJY42DiXOJY41zjYOJc42TiYOJc42DjZOJg42jiZOJg42TjaOJk42ziaOJk42jjbOJo43DibOJo42zjcOJs43TicOJs43DjdOJw43jidOJw43TjeOJ043zieOJ043jjfOJ844TigOJ844DjhOKA44jihOKA44TjiOKE44ziiOKE44jjjOKI45DijOKI44zjkOKM45TikOKM45DjlOKQ45jilOKQ45TjmOKU45zimOKU45jjnOKY46DinOKY45zjoOKc46TioOKc46DjpOKg46jipOKg46TjqOKk46ziqOKk46jjrOKo47DirOKo46zjsOKs47TisOKs47DjtOKw47jitOKw47TjuOK047ziuOK047jjvOK448DivOK447zjwOK848TiwOK848DjxOLA48jixOLA48TjyOLE48ziyOLE48jjzOLI49DizOLI48zj0OLM49Ti0OLM49Dj1OLQ49ji1OLQ49Tj2OLU49zi2OLU49jj3OLY4+Di3OLY49zj4OLc4+Ti4OLc4+Dj5OLg4+ji5OLg4+Tj6OLk4+zi6OLk4+jj7OLo4/Di7OLo4+zj8OLs4/Ti8OLs4/Dj9OLw4/ji9OLw4/Tj+OL04/zi+OL04/jj/OL44ADm/OL44/zgAOb84ATnAOL84ADkBOcA4AjnBOMA4ATkCOcE4AznCOME4AjkDOcI4BDnDOMI4AzkEOcM4BTnEOMM4BDkFOcQ4BjnFOMQ4BTkGOcU4BznGOMU4BjkHOcY4CDnHOMY4BzkIOcc4CTnIOMc4CDkJOcg4CjnJOMg4CTkKOck4CznKOMk4CjkLOco4DDnLOMo4CzkMOcs4DTnMOMs4DDkNOcw4DjnNOMw4DTkOOc04DznOOM04DjkPOc44EDnPOM44DzkQOc84ETnQOM84EDkROdA4EjnRONA4ETkSOdE4EznSONE4EjkTOdI4FDnTONI4EzkUOdM4FTnUONM4FDkVOdQ4FjnVONQ4FTkWOdU4FznWONU4FjkXOdY4GDnXONY4FzkYOdc4GTnYONc4GDkZOdg4GjnZONg4GTkaOdk4GznaONk4GjkbOdo4HDnbONo4GzkcOds4HTncONs4HDkdOdw4HjndONw4HTkeOd04HzneON04HjkfOd44IDnfON44HzkgOeA4IjnhOOA4ITkiOeE4IzniOOE4IjkjOeI4JDnjOOI4IzkkOeM4JTnkOOM4JDklOeQ4JjnlOOQ4JTkmOeU4JznmOOU4JjknOeY4KDnnOOY4JzkoOec4KTnoOOc4KDkpOeg4KjnpOOg4KTkqOek4KznqOOk4KjkrOeo4LDnrOOo4KzksOes4LTnsOOs4LDktOew4LjntOOw4LTkuOe04LznuOO04LjkvOe44MDnvOO44LzkwOe84MTnwOO84MDkxOfA4MjnxOPA4MTkyOfE4MznyOPE4MjkzOfI4NDnzOPI4Mzk0OfM4NTn0OPM4NDk1OfQ4Njn1OPQ4NTk2OfU4Nzn2OPU4Njk3OfY4ODn3OPY4Nzk4Ofc4OTn4OPc4ODk5Ofg4Ojn5OPg4OTk6Ofk4Ozn6OPk4Ojk7Ofo4PDn7OPo4Ozk8Ofs4PTn8OPs4PDk9Ofw4Pjn9OPw4PTk+Of04Pzn+OP04Pjk/Of44QDn/OP44PzlAOf84QTkAOf84QDlBOQA5QjkBOQA5QTlCOQE5QzkCOQE5QjlDOQI5RDkDOQI5QzlEOQM5RTkEOQM5RDlFOQQ5RjkFOQQ5RTlGOQU5RzkGOQU5RjlHOQY5SDkHOQY5RzlIOQc5STkIOQc5SDlJOQg5SjkJOQg5STlKOQk5SzkKOQk5SjlLOQo5TDkLOQo5SzlMOQs5TTkMOQs5TDlNOQw5TjkNOQw5TTlOOQ05TzkOOQ05TjlPOQ45UDkPOQ45TzlQOQ85UTkQOQ85UDlRORA5UjkRORA5UTlSORE5UzkSORE5UjlTORI5VDkTORI5UzlUORM5VTkUORM5VDlVORQ5VjkVORQ5VTlWORU5VzkWORU5VjlXORY5WDkXORY5VzlYORc5WTkYORc5WDlZORg5WjkZORg5WTlaORk5WzkaORk5WjlbORo5XDkbORo5WzlcORs5XTkcORs5XDldORw5XjkdORw5XTleOR05XzkeOR05XjlfOR45YDkfOR45XzlgOR85YTkgOR85YDlhOSE5YzkiOSE5YjljOSI5ZDkjOSI5YzlkOSM5ZTkkOSM5ZDllOSQ5ZjklOSQ5ZTlmOSU5ZzkmOSU5ZjlnOSY5aDknOSY5ZzloOSc5aTkoOSc5aDlpOSg5ajkpOSg5aTlqOSk5azkqOSk5ajlrOSo5bDkrOSo5azlsOSs5bTksOSs5bDltOSw5bjktOSw5bTluOS05bzkuOS05bjlvOS45cDkvOS45bzlwOS85cTkwOS85cDlxOTA5cjkxOTA5cTlyOTE5czkyOTE5cjlzOTI5dDkzOTI5czl0OTM5dTk0OTM5dDl1OTQ5djk1OTQ5dTl2OTU5dzk2OTU5djl3OTY5eDk3OTY5dzl4OTc5eTk4OTc5eDl5OTg5ejk5OTg5eTl6OTk5ezk6OTk5ejl7OTo5fDk7OTo5ezl8OTs5fTk8OTs5fDl9OTw5fjk9OTw5fTl+OT05fzk+OT05fjl/OT45gDk/OT45fzmAOT85gTlAOT85gDmBOUA5gjlBOUA5gTmCOUE5gzlCOUE5gjmDOUI5hDlDOUI5gzmEOUM5hTlEOUM5hDmFOUQ5hjlFOUQ5hTmGOUU5hzlGOUU5hjmHOUY5iDlHOUY5hzmIOUc5iTlIOUc5iDmJOUg5ijlJOUg5iTmKOUk5izlKOUk5ijmLOUo5jDlLOUo5izmMOUs5jTlMOUs5jDmNOUw5jjlNOUw5jTmOOU05jzlOOU05jjmPOU45kDlPOU45jzmQOU85kTlQOU85kDmROVA5kjlROVA5kTmSOVE5kzlSOVE5kjmTOVI5lDlTOVI5kzmUOVM5lTlUOVM5lDmVOVQ5ljlVOVQ5lTmWOVU5lzlWOVU5ljmXOVY5mDlXOVY5lzmYOVc5mTlYOVc5mDmZOVg5mjlZOVg5mTmaOVk5mzlaOVk5mjmbOVo5nDlbOVo5mzmcOVs5nTlcOVs5nDmdOVw5njldOVw5nTmeOV05nzleOV05njmfOV45oDlfOV45nzmgOV85oTlgOV85oDmhOWA5ojlhOWA5oTmiOWI5pDljOWI5ozmkOWM5pTlkOWM5pDmlOWQ5pjllOWQ5pTmmOWU5pzlmOWU5pjmnOWY5qDlnOWY5pzmoOWc5qTloOWc5qDmpOWg5qjlpOWg5qTmqOWk5qzlqOWk5qjmrOWo5rDlrOWo5qzmsOWs5rTlsOWs5rDmtOWw5rjltOWw5rTmuOW05rzluOW05rjmvOW45sDlvOW45rzmwOW85sTlwOW85sDmxOXA5sjlxOXA5sTmyOXE5szlyOXE5sjmzOXI5tDlzOXI5szm0OXM5tTl0OXM5tDm1OXQ5tjl1OXQ5tTm2OXU5tzl2OXU5tjm3OXY5uDl3OXY5tzm4OXc5uTl4OXc5uDm5OXg5ujl5OXg5uTm6OXk5uzl6OXk5ujm7OXo5vDl7OXo5uzm8OXs5vTl8OXs5vDm9OXw5vjl9OXw5vTm+OX05vzl+OX05vjm/OX45wDl/OX45vznAOX85wTmAOX85wDnBOYA5wjmBOYA5wTnCOYE5wzmCOYE5wjnDOYI5xDmDOYI5wznEOYM5xTmEOYM5xDnFOYQ5xjmFOYQ5xTnGOYU5xzmGOYU5xjnHOYY5yDmHOYY5xznIOYc5yTmIOYc5yDnJOYg5yjmJOYg5yTnKOYk5yzmKOYk5yjnLOYo5zDmLOYo5yznMOYs5zTmMOYs5zDnNOYw5zjmNOYw5zTnOOY05zzmOOY05zjnPOY450DmPOY45zznQOY850TmQOY850DnROZA50jmROZA50TnSOZE50zmSOZE50jnTOZI51DmTOZI50znUOZM51TmUOZM51DnVOZQ51jmVOZQ51TnWOZU51zmWOZU51jnXOZY52DmXOZY51znYOZc52TmYOZc52DnZOZg52jmZOZg52TnaOZk52zmaOZk52jnbOZo53DmbOZo52zncOZs53TmcOZs53DndOZw53jmdOZw53TneOZ053zmeOZ053jnfOZ454DmfOZ453zngOZ854TmgOZ854DnhOaA54jmhOaA54TniOaE54zmiOaE54jnjOaM55TmkOaM55DnlOaQ55jmlOaQ55TnmOaU55zmmOaU55jnnOaY56DmnOaY55znoOac56TmoOac56DnpOag56jmpOag56TnqOak56zmqOak56jnrOao57DmrOao56znsOas57TmsOas57DntOaw57jmtOaw57TnuOa057zmuOa057jnvOa458DmvOa457znwOa858TmwOa858DnxObA58jmxObA58TnyObE58zmyObE58jnzObI59DmzObI58zn0ObM59Tm0ObM59Dn1ObQ59jm1ObQ59Tn2ObU59zm2ObU59jn3ObY5+Dm3ObY59zn4Obc5+Tm4Obc5+Dn5Obg5+jm5Obg5+Tn6Obk5+zm6Obk5+jn7Obo5/Dm7Obo5+zn8Obs5/Tm8Obs5/Dn9Obw5/jm9Obw5/Tn+Ob05/zm+Ob05/jn/Ob45ADq/Ob45/zkAOr85ATrAOb85ADoBOsA5AjrBOcA5AToCOsE5AzrCOcE5AjoDOsI5BDrDOcI5AzoEOsM5BTrEOcM5BDoFOsQ5BjrFOcQ5BToGOsU5BzrGOcU5BjoHOsY5CDrHOcY5BzoIOsc5CTrIOcc5CDoJOsg5CjrJOcg5CToKOsk5CzrKOck5CjoLOso5DDrLOco5CzoMOss5DTrMOcs5DDoNOsw5DjrNOcw5DToOOs05DzrOOc05DjoPOs45EDrPOc45DzoQOs85ETrQOc85EDoROtA5EjrROdA5EToSOtE5EzrSOdE5EjoTOtI5FDrTOdI5EzoUOtM5FTrUOdM5FDoVOtQ5FjrVOdQ5FToWOtU5FzrWOdU5FjoXOtY5GDrXOdY5FzoYOtc5GTrYOdc5GDoZOtg5GjrZOdg5GToaOtk5GzraOdk5GjobOto5HDrbOdo5GzocOts5HTrcOds5HDodOtw5HjrdOdw5HToeOt05HzreOd05HjofOt45IDrfOd45HzogOt85ITrgOd85IDohOuA5IjrhOeA5IToiOuE5IzriOeE5IjojOuI5JDrjOeI5IzokOuQ5JjrlOeQ5JTomOuU5JzrmOeU5JjonOuY5KDrnOeY5JzooOuc5KTroOec5KDopOug5KjrpOeg5KToqOuk5KzrqOek5KjorOuo5LDrrOeo5KzosOus5LTrsOes5LDotOuw5LjrtOew5LTouOu05LzruOe05LjovOu45MDrvOe45LzowOu85MTrwOe85MDoxOvA5MjrxOfA5MToyOvE5MzryOfE5MjozOvI5NDrzOfI5Mzo0OvM5NTr0OfM5NDo1OvQ5Njr1OfQ5NTo2OvU5Nzr2OfU5Njo3OvY5ODr3OfY5Nzo4Ovc5OTr4Ofc5ODo5Ovg5Ojr5Ofg5OTo6Ovk5Ozr6Ofk5Ojo7Ovo5PDr7Ofo5Ozo8Ovs5PTr8Ofs5PDo9Ovw5Pjr9Ofw5PTo+Ov05Pzr+Of05Pjo/Ov45QDr/Of45PzpAOv85QToAOv85QDpBOgA6QjoBOgA6QTpCOgE6QzoCOgE6QjpDOgI6RDoDOgI6QzpEOgM6RToEOgM6RDpFOgQ6RjoFOgQ6RTpGOgU6RzoGOgU6RjpHOgY6SDoHOgY6RzpIOgc6SToIOgc6SDpJOgg6SjoJOgg6STpKOgk6SzoKOgk6SjpLOgo6TDoLOgo6SzpMOgs6TToMOgs6TDpNOgw6TjoNOgw6TTpOOg06TzoOOg06TjpPOg46UDoPOg46TzpQOg86UToQOg86UDpROhA6UjoROhA6UTpSOhE6UzoSOhE6UjpTOhI6VDoTOhI6UzpUOhM6VToUOhM6VDpVOhQ6VjoVOhQ6VTpWOhU6VzoWOhU6VjpXOhY6WDoXOhY6VzpYOhc6WToYOhc6WDpZOhg6WjoZOhg6WTpaOhk6WzoaOhk6WjpbOho6XDobOho6WzpcOhs6XTocOhs6XDpdOhw6XjodOhw6XTpeOh06XzoeOh06XjpfOh46YDofOh46XzpgOh86YTogOh86YDphOiA6YjohOiA6YTpiOiE6YzoiOiE6YjpjOiI6ZDojOiI6YzpkOiM6ZTokOiM6ZDplOiU6ZzomOiU6ZjpnOiY6aDonOiY6ZzpoOic6aTooOic6aDppOig6ajopOig6aTpqOik6azoqOik6ajprOio6bDorOio6azpsOis6bTosOis6bDptOiw6bjotOiw6bTpuOi06bzouOi06bjpvOi46cDovOi46bzpwOi86cTowOi86cDpxOjA6cjoxOjA6cTpyOjE6czoyOjE6cjpzOjI6dDozOjI6czp0OjM6dTo0OjM6dDp1OjQ6djo1OjQ6dTp2OjU6dzo2OjU6djp3OjY6eDo3OjY6dzp4Ojc6eTo4Ojc6eDp5Ojg6ejo5Ojg6eTp6Ojk6ezo6Ojk6ejp7Ojo6fDo7Ojo6ezp8Ojs6fTo8Ojs6fDp9Ojw6fjo9Ojw6fTp+Oj06fzo+Oj06fjp/Oj46gDo/Oj46fzqAOj86gTpAOj86gDqBOkA6gjpBOkA6gTqCOkE6gzpCOkE6gjqDOkI6hDpDOkI6gzqEOkM6hTpEOkM6hDqFOkQ6hjpFOkQ6hTqGOkU6hzpGOkU6hjqHOkY6iDpHOkY6hzqIOkc6iTpIOkc6iDqJOkg6ijpJOkg6iTqKOkk6izpKOkk6ijqLOko6jDpLOko6izqMOks6jTpMOks6jDqNOkw6jjpNOkw6jTqOOk06jzpOOk06jjqPOk46kDpPOk46jzqQOk86kTpQOk86kDqROlA6kjpROlA6kTqSOlE6kzpSOlE6kjqTOlI6lDpTOlI6kzqUOlM6lTpUOlM6lDqVOlQ6ljpVOlQ6lTqWOlU6lzpWOlU6ljqXOlY6mDpXOlY6lzqYOlc6mTpYOlc6mDqZOlg6mjpZOlg6mTqaOlk6mzpaOlk6mjqbOlo6nDpbOlo6mzqcOls6nTpcOls6nDqdOlw6njpdOlw6nTqeOl06nzpeOl06njqfOl46oDpfOl46nzqgOl86oTpgOl86oDqhOmA6ojphOmA6oTqiOmE6ozpiOmE6ojqjOmI6pDpjOmI6ozqkOmM6pTpkOmM6pDqlOmQ6pjplOmQ6pTqmOmY6qDpnOmY6pzqoOmc6qTpoOmc6qDqpOmg6qjppOmg6qTqqOmk6qzpqOmk6qjqrOmo6rDprOmo6qzqsOms6rTpsOms6rDqtOmw6rjptOmw6rTquOm06rzpuOm06rjqvOm46sDpvOm46rzqwOm86sTpwOm86sDqxOnA6sjpxOnA6sTqyOnE6szpyOnE6sjqzOnI6tDpzOnI6szq0OnM6tTp0OnM6tDq1OnQ6tjp1OnQ6tTq2OnU6tzp2OnU6tjq3OnY6uDp3OnY6tzq4Onc6uTp4Onc6uDq5Ong6ujp5Ong6uTq6Onk6uzp6Onk6ujq7Ono6vDp7Ono6uzq8Ons6vTp8Ons6vDq9Onw6vjp9Onw6vTq+On06vzp+On06vjq/On46wDp/On46vzrAOn86wTqAOn86wDrBOoA6wjqBOoA6wTrCOoE6wzqCOoE6wjrDOoI6xDqDOoI6wzrEOoM6xTqEOoM6xDrFOoQ6xjqFOoQ6xTrGOoU6xzqGOoU6xjrHOoY6yDqHOoY6xzrIOoc6yTqIOoc6yDrJOog6yjqJOog6yTrKOok6yzqKOok6yjrLOoo6zDqLOoo6yzrMOos6zTqMOos6zDrNOow6zjqNOow6zTrOOo06zzqOOo06zjrPOo460DqPOo46zzrQOo860TqQOo860DrROpA60jqROpA60TrSOpE60zqSOpE60jrTOpI61DqTOpI60zrUOpM61TqUOpM61DrVOpQ61jqVOpQ61TrWOpU61zqWOpU61jrXOpY62DqXOpY61zrYOpc62TqYOpc62DrZOpg62jqZOpg62TraOpk62zqaOpk62jrbOpo63DqbOpo62zrcOps63TqcOps63DrdOpw63jqdOpw63TreOp063zqeOp063jrfOp464DqfOp463zrgOp864TqgOp864DrhOqA64jqhOqA64TriOqE64zqiOqE64jrjOqI65DqjOqI64zrkOqM65TqkOqM65DrlOqQ65jqlOqQ65TrmOqU65zqmOqU65jrnOqc66TqoOqc66DrpOqg66jqpOqg66TrqOqk66zqqOqk66jrrOqo67DqrOqo66zrsOqs67TqsOqs67DrtOqw67jqtOqw67TruOq067zquOq067jrvOq468DqvOq467zrwOq868TqwOq868DrxOrA68jqxOrA68TryOrE68zqyOrE68jrzOrI69DqzOrI68zr0OrM69Tq0OrM69Dr1OrQ69jq1OrQ69Tr2OrU69zq2OrU69jr3OrY6+Dq3OrY69zr4Orc6+Tq4Orc6+Dr5Org6+jq5Org6+Tr6Ork6+zq6Ork6+jr7Oro6/Dq7Oro6+zr8Ors6/Tq8Ors6/Dr9Orw6/jq9Orw6/Tr+Or06/zq+Or06/jr/Or46ADu/Or46/zoAO786ATvAOr86ADsBO8A6AjvBOsA6ATsCO8E6AzvCOsE6AjsDO8I6BDvDOsI6AzsEO8M6BTvEOsM6BDsFO8Q6BjvFOsQ6BTsGO8U6BzvGOsU6BjsHO8Y6CDvHOsY6BzsIO8c6CTvIOsc6CDsJO8g6CjvJOsg6CTsKO8k6CzvKOsk6CjsLO8o6DDvLOso6CzsMO8s6DTvMOss6DDsNO8w6DjvNOsw6DTsOO806DzvOOs06DjsPO846EDvPOs46DzsQO886ETvQOs86EDsRO9A6EjvROtA6ETsSO9E6EzvSOtE6EjsTO9I6FDvTOtI6EzsUO9M6FTvUOtM6FDsVO9Q6FjvVOtQ6FTsWO9U6FzvWOtU6FjsXO9Y6GDvXOtY6FzsYO9c6GTvYOtc6GDsZO9g6GjvZOtg6GTsaO9k6GzvaOtk6GjsbO9o6HDvbOto6GzscO9s6HTvcOts6HDsdO9w6HjvdOtw6HTseO906HzveOt06HjsfO946IDvfOt46HzsgO986ITvgOt86IDshO+A6IjvhOuA6ITsiO+E6IzviOuE6IjsjO+I6JDvjOuI6IzskO+M6JTvkOuM6JDslO+Q6JjvlOuQ6JTsmO+U6JzvmOuU6JjsnO+Y6KDvnOuY6JzsoO+g6KjvpOug6KTsqO+k6KzvqOuk6KjsrO+o6LDvrOuo6KzssO+s6LTvsOus6LDstO+w6LjvtOuw6LTsuO+06LzvuOu06LjsvO+46MDvvOu46LzswO+86MTvwOu86MDsxO/A6MjvxOvA6MTsyO/E6MzvyOvE6MjszO/I6NDvzOvI6Mzs0O/M6NTv0OvM6NDs1O/Q6Njv1OvQ6NTs2O/U6Nzv2OvU6Njs3O/Y6ODv3OvY6Nzs4O/c6OTv4Ovc6ODs5O/g6Ojv5Ovg6OTs6O/k6Ozv6Ovk6Ojs7O/o6PDv7Ovo6Ozs8O/s6PTv8Ovs6PDs9O/w6Pjv9Ovw6PTs+O/06Pzv+Ov06Pjs/O/46QDv/Ov46PztAO/86QTsAO/86QDtBOwA7QjsBOwA7QTtCOwE7QzsCOwE7QjtDOwI7RDsDOwI7QztEOwM7RTsEOwM7RDtFOwQ7RjsFOwQ7RTtGOwU7RzsGOwU7RjtHOwY7SDsHOwY7RztIOwc7STsIOwc7SDtJOwg7SjsJOwg7STtKOwk7SzsKOwk7SjtLOwo7TDsLOwo7SztMOws7TTsMOws7TDtNOww7TjsNOww7TTtOOw07TzsOOw07TjtPOw47UDsPOw47TztQOw87UTsQOw87UDtROxA7UjsROxA7UTtSOxE7UzsSOxE7UjtTOxI7VDsTOxI7UztUOxM7VTsUOxM7VDtVOxQ7VjsVOxQ7VTtWOxU7VzsWOxU7VjtXOxY7WDsXOxY7VztYOxc7WTsYOxc7WDtZOxg7WjsZOxg7WTtaOxk7WzsaOxk7WjtbOxo7XDsbOxo7WztcOxs7XTscOxs7XDtdOxw7XjsdOxw7XTteOx07XzseOx07XjtfOx47YDsfOx47XztgOx87YTsgOx87YDthOyA7YjshOyA7YTtiOyE7YzsiOyE7YjtjOyI7ZDsjOyI7YztkOyM7ZTskOyM7ZDtlOyQ7ZjslOyQ7ZTtmOyU7ZzsmOyU7ZjtnOyY7aDsnOyY7ZztoOyc7aTsoOyc7aDtpOyk7azsqOyk7ajtrOyo7bDsrOyo7aztsOys7bTssOys7bDttOyw7bjstOyw7bTtuOy07bzsuOy07bjtvOy47cDsvOy47bztwOy87cTswOy87cDtxOzA7cjsxOzA7cTtyOzE7czsyOzE7cjtzOzI7dDszOzI7czt0OzM7dTs0OzM7dDt1OzQ7djs1OzQ7dTt2OzU7dzs2OzU7djt3OzY7eDs3OzY7dzt4Ozc7eTs4Ozc7eDt5Ozg7ejs5Ozg7eTt6Ozk7ezs6Ozk7ejt7Ozo7fDs7Ozo7ezt8Ozs7fTs8Ozs7fDt9Ozw7fjs9Ozw7fTt+Oz07fzs+Oz07fjt/Oz47gDs/Oz47fzuAOz87gTtAOz87gDuBO0A7gjtBO0A7gTuCO0E7gztCO0E7gjuDO0I7hDtDO0I7gzuEO0M7hTtEO0M7hDuFO0Q7hjtFO0Q7hTuGO0U7hztGO0U7hjuHO0Y7iDtHO0Y7hzuIO0c7iTtIO0c7iDuJO0g7ijtJO0g7iTuKO0k7iztKO0k7ijuLO0o7jDtLO0o7izuMO0s7jTtMO0s7jDuNO0w7jjtNO0w7jTuOO007jztOO007jjuPO047kDtPO047jzuQO087kTtQO087kDuRO1A7kjtRO1A7kTuSO1E7kztSO1E7kjuTO1I7lDtTO1I7kzuUO1M7lTtUO1M7lDuVO1Q7ljtVO1Q7lTuWO1U7lztWO1U7ljuXO1Y7mDtXO1Y7lzuYO1c7mTtYO1c7mDuZO1g7mjtZO1g7mTuaO1k7mztaO1k7mjubO1o7nDtbO1o7mzucO1s7nTtcO1s7nDudO1w7njtdO1w7nTueO107nzteO107njufO147oDtfO147nzugO187oTtgO187oDuhO2A7ojthO2A7oTuiO2E7oztiO2E7ojujO2I7pDtjO2I7ozukO2M7pTtkO2M7pDulO2Q7pjtlO2Q7pTumO2U7pztmO2U7pjunO2Y7qDtnO2Y7pzuoO2c7qTtoO2c7qDupO2g7qjtpO2g7qTuqO2o7rDtrO2o7qzusO2s7rTtsO2s7rDutO2w7rjttO2w7rTuuO207rztuO207rjuvO247sDtvO247rzuwO287sTtwO287sDuxO3A7sjtxO3A7sTuyO3E7sztyO3E7sjuzO3I7tDtzO3I7szu0O3M7tTt0O3M7tDu1O3Q7tjt1O3Q7tTu2O3U7tzt2O3U7tju3O3Y7uDt3O3Y7tzu4O3c7uTt4O3c7uDu5O3g7ujt5O3g7uTu6O3k7uzt6O3k7uju7O3o7vDt7O3o7uzu8O3s7vTt8O3s7vDu9O3w7vjt9O3w7vTu+O307vzt+O307vju/O347wDt/O347vzvAO387wTuAO387wDvBO4A7wjuBO4A7wTvCO4E7wzuCO4E7wjvDO4I7xDuDO4I7wzvEO4M7xTuEO4M7xDvFO4Q7xjuFO4Q7xTvGO4U7xzuGO4U7xjvHO4Y7yDuHO4Y7xzvIO4c7yTuIO4c7yDvJO4g7yjuJO4g7yTvKO4k7yzuKO4k7yjvLO4o7zDuLO4o7yzvMO4s7zTuMO4s7zDvNO4w7zjuNO4w7zTvOO407zzuOO407zjvPO4470DuPO447zzvQO4870TuQO4870DvRO5A70juRO5A70TvSO5E70zuSO5E70jvTO5I71DuTO5I70zvUO5M71TuUO5M71DvVO5Q71juVO5Q71TvWO5U71zuWO5U71jvXO5Y72DuXO5Y71zvYO5c72TuYO5c72DvZO5g72juZO5g72TvaO5k72zuaO5k72jvbO5o73DubO5o72zvcO5s73TucO5s73DvdO5w73judO5w73TveO5073zueO5073jvfO5474DufO5473zvgO5874TugO5874DvhO6A74juhO6A74TviO6E74zuiO6E74jvjO6I75DujO6I74zvkO6M75TukO6M75DvlO6Q75julO6Q75TvmO6U75zumO6U75jvnO6Y76DunO6Y75zvoO6c76TuoO6c76DvpO6g76jupO6g76TvqO6k76zuqO6k76jvrO6s77TusO6s77DvtO6w77jutO6w77TvuO6077zuuO6077jvvO6478DuvO6477zvwO6878TuwO6878DvxO7A78juxO7A78TvyO7E78zuyO7E78jvzO7I79DuzO7I78zv0O7M79Tu0O7M79Dv1O7Q79ju1O7Q79Tv2O7U79zu2O7U79jv3O7Y7+Du3O7Y79zv4O7c7+Tu4O7c7+Dv5O7g7+ju5O7g7+Tv6O7k7+zu6O7k7+jv7O7o7/Du7O7o7+zv8O7s7/Tu8O7s7/Dv9O7w7/ju9O7w7/Tv+O707/zu+O707/jv/O747ADy/O747/zsAPL87ATzAO787ADwBPMA7AjzBO8A7ATwCPME7AzzCO8E7AjwDPMI7BDzDO8I7AzwEPMM7BTzEO8M7BDwFPMQ7BjzFO8Q7BTwGPMU7BzzGO8U7BjwHPMY7CDzHO8Y7BzwIPMc7CTzIO8c7CDwJPMg7CjzJO8g7CTwKPMk7CzzKO8k7CjwLPMo7DDzLO8o7CzwMPMs7DTzMO8s7DDwNPMw7DjzNO8w7DTwOPM07DzzOO807DjwPPM47EDzPO847DzwQPM87ETzQO887EDwRPNA7EjzRO9A7ETwSPNE7EzzSO9E7EjwTPNI7FDzTO9I7EzwUPNM7FTzUO9M7FDwVPNQ7FjzVO9Q7FTwWPNU7FzzWO9U7FjwXPNY7GDzXO9Y7FzwYPNc7GTzYO9c7GDwZPNg7GjzZO9g7GTwaPNk7GzzaO9k7GjwbPNo7HDzbO9o7GzwcPNs7HTzcO9s7HDwdPNw7HjzdO9w7HTwePN07HzzeO907HjwfPN47IDzfO947HzwgPN87ITzgO987IDwhPOA7IjzhO+A7ITwiPOE7IzziO+E7IjwjPOI7JDzjO+I7IzwkPOM7JTzkO+M7JDwlPOQ7JjzlO+Q7JTwmPOU7JzzmO+U7JjwnPOY7KDznO+Y7JzwoPOc7KTzoO+c7KDwpPOg7KjzpO+g7KTwqPOk7KzzqO+k7KjwrPOo7LDzrO+o7KzwsPOw7LjztO+w7LTwuPO07LzzuO+07LjwvPO47MDzvO+47LzwwPO87MTzwO+87MDwxPPA7MjzxO/A7MTwyPPE7MzzyO/E7MjwzPPI7NDzzO/I7Mzw0PPM7NTz0O/M7NDw1PPQ7Njz1O/Q7NTw2PPU7Nzz2O/U7Njw3PPY7ODz3O/Y7Nzw4PPc7OTz4O/c7ODw5PPg7Ojz5O/g7OTw6PPk7Ozz6O/k7Ojw7PPo7PDz7O/o7Ozw8PPs7PTz8O/s7PDw9PPw7Pjz9O/w7PTw+PP07Pzz+O/07Pjw/PP47QDz/O/47PzxAPP87QTwAPP87QDxBPAA8QjwBPAA8QTxCPAE8QzwCPAE8QjxDPAI8RDwDPAI8QzxEPAM8RTwEPAM8RDxFPAQ8RjwFPAQ8RTxGPAU8RzwGPAU8RjxHPAY8SDwHPAY8RzxIPAc8STwIPAc8SDxJPAg8SjwJPAg8STxKPAk8SzwKPAk8SjxLPAo8TDwLPAo8SzxMPAs8TTwMPAs8TDxNPAw8TjwNPAw8TTxOPA08TzwOPA08TjxPPA48UDwPPA48TzxQPA88UTwQPA88UDxRPBA8UjwRPBA8UTxSPBE8UzwSPBE8UjxTPBI8VDwTPBI8UzxUPBM8VTwUPBM8VDxVPBQ8VjwVPBQ8VTxWPBU8VzwWPBU8VjxXPBY8WDwXPBY8VzxYPBc8WTwYPBc8WDxZPBg8WjwZPBg8WTxaPBk8WzwaPBk8WjxbPBo8XDwbPBo8WzxcPBs8XTwcPBs8XDxdPBw8XjwdPBw8XTxePB08XzwePB08XjxfPB48YDwfPB48XzxgPB88YTwgPB88YDxhPCA8YjwhPCA8YTxiPCE8YzwiPCE8YjxjPCI8ZDwjPCI8YzxkPCM8ZTwkPCM8ZDxlPCQ8ZjwlPCQ8ZTxmPCU8ZzwmPCU8ZjxnPCY8aDwnPCY8ZzxoPCc8aTwoPCc8aDxpPCg8ajwpPCg8aTxqPCk8azwqPCk8ajxrPCo8bDwrPCo8azxsPCs8bTwsPCs8bDxtPC08bzwuPC08bjxvPC48cDwvPC48bzxwPC88cTwwPC88cDxxPDA8cjwxPDA8cTxyPDE8czwyPDE8cjxzPDI8dDwzPDI8czx0PDM8dTw0PDM8dDx1PDQ8djw1PDQ8dTx2PDU8dzw2PDU8djx3PDY8eDw3PDY8dzx4PDc8eTw4PDc8eDx5PDg8ejw5PDg8eTx6PDk8ezw6PDk8ejx7PDo8fDw7PDo8ezx8PDs8fTw8PDs8fDx9PDw8fjw9PDw8fTx+PD08fzw+PD08fjx/PD48gDw/PD48fzyAPD88gTxAPD88gDyBPEA8gjxBPEA8gTyCPEE8gzxCPEE8gjyDPEI8hDxDPEI8gzyEPEM8hTxEPEM8hDyFPEQ8hjxFPEQ8hTyGPEU8hzxGPEU8hjyHPEY8iDxHPEY8hzyIPEc8iTxIPEc8iDyJPEg8ijxJPEg8iTyKPEk8izxKPEk8ijyLPEo8jDxLPEo8izyMPEs8jTxMPEs8jDyNPEw8jjxNPEw8jTyOPE08jzxOPE08jjyPPE48kDxPPE48jzyQPE88kTxQPE88kDyRPFA8kjxRPFA8kTySPFE8kzxSPFE8kjyTPFI8lDxTPFI8kzyUPFM8lTxUPFM8lDyVPFQ8ljxVPFQ8lTyWPFU8lzxWPFU8ljyXPFY8mDxXPFY8lzyYPFc8mTxYPFc8mDyZPFg8mjxZPFg8mTyaPFk8mzxaPFk8mjybPFo8nDxbPFo8mzycPFs8nTxcPFs8nDydPFw8njxdPFw8nTyePF08nzxePF08njyfPF48oDxfPF48nzygPF88oTxgPF88oDyhPGA8ojxhPGA8oTyiPGE8ozxiPGE8ojyjPGI8pDxjPGI8ozykPGM8pTxkPGM8pDylPGQ8pjxlPGQ8pTymPGU8pzxmPGU8pjynPGY8qDxnPGY8pzyoPGc8qTxoPGc8qDypPGg8qjxpPGg8qTyqPGk8qzxqPGk8qjyrPGo8rDxrPGo8qzysPGs8rTxsPGs8rDytPGw8rjxtPGw8rTyuPG48sDxvPG48rzywPG88sTxwPG88sDyxPHA8sjxxPHA8sTyyPHE8szxyPHE8sjyzPHI8tDxzPHI8szy0PHM8tTx0PHM8tDy1PHQ8tjx1PHQ8tTy2PHU8tzx2PHU8tjy3PHY8uDx3PHY8tzy4PHc8uTx4PHc8uDy5PHg8ujx5PHg8uTy6PHk8uzx6PHk8ujy7PHo8vDx7PHo8uzy8PHs8vTx8PHs8vDy9PHw8vjx9PHw8vTy+PH08vzx+PH08vjy/PH48wDx/PH48vzzAPH88wTyAPH88wDzBPIA8wjyBPIA8wTzCPIE8wzyCPIE8wjzDPII8xDyDPII8wzzEPIM8xTyEPIM8xDzFPIQ8xjyFPIQ8xTzGPIU8xzyGPIU8xjzHPIY8yDyHPIY8xzzIPIc8yTyIPIc8yDzJPIg8yjyJPIg8yTzKPIk8yzyKPIk8yjzLPIo8zDyLPIo8yzzMPIs8zTyMPIs8zDzNPIw8zjyNPIw8zTzOPI08zzyOPI08zjzPPI480DyPPI48zzzQPI880TyQPI880DzRPJA80jyRPJA80TzSPJE80zySPJE80jzTPJI81DyTPJI80zzUPJM81TyUPJM81DzVPJQ81jyVPJQ81TzWPJU81zyWPJU81jzXPJY82DyXPJY81zzYPJc82TyYPJc82DzZPJg82jyZPJg82TzaPJk82zyaPJk82jzbPJo83DybPJo82zzcPJs83TycPJs83DzdPJw83jydPJw83TzePJ083zyePJ083jzfPJ484DyfPJ483zzgPJ884TygPJ884DzhPKA84jyhPKA84TziPKE84zyiPKE84jzjPKI85DyjPKI84zzkPKM85TykPKM85DzlPKQ85jylPKQ85TzmPKU85zymPKU85jznPKY86DynPKY85zzoPKc86TyoPKc86DzpPKg86jypPKg86TzqPKk86zyqPKk86jzrPKo87DyrPKo86zzsPKs87TysPKs87DztPKw87jytPKw87TzuPK087zyuPK087jzvPK888TywPK888DzxPLA88jyxPLA88TzyPLE88zyyPLE88jzzPLI89DyzPLI88zz0PLM89Ty0PLM89Dz1PLQ89jy1PLQ89Tz2PLU89zy2PLU89jz3PLY8+Dy3PLY89zz4PLc8+Ty4PLc8+Dz5PLg8+jy5PLg8+Tz6PLk8+zy6PLk8+jz7PLo8/Dy7PLo8+zz8PLs8/Ty8PLs8/Dz9PLw8/jy9PLw8/Tz+PL08/zy+PL08/jz/PL48AD2/PL48/zwAPb88AT3APL88AD0BPcA8Aj3BPMA8AT0CPcE8Az3CPME8Aj0DPcI8BD3DPMI8Az0EPcM8BT3EPMM8BD0FPcQ8Bj3FPMQ8BT0GPcU8Bz3GPMU8Bj0HPcY8CD3HPMY8Bz0IPcc8CT3IPMc8CD0JPcg8Cj3JPMg8CT0KPck8Cz3KPMk8Cj0LPco8DD3LPMo8Cz0MPcs8DT3MPMs8DD0NPcw8Dj3NPMw8DT0OPc08Dz3OPM08Dj0PPc48ED3PPM48Dz0QPc88ET3QPM88ED0RPdA8Ej3RPNA8ET0SPdE8Ez3SPNE8Ej0TPdI8FD3TPNI8Ez0UPdM8FT3UPNM8FD0VPdQ8Fj3VPNQ8FT0WPdU8Fz3WPNU8Fj0XPdY8GD3XPNY8Fz0YPdc8GT3YPNc8GD0ZPdg8Gj3ZPNg8GT0aPdk8Gz3aPNk8Gj0bPdo8HD3bPNo8Gz0cPds8HT3cPNs8HD0dPdw8Hj3dPNw8HT0ePd08Hz3ePN08Hj0fPd48ID3fPN48Hz0gPd88IT3gPN88ID0hPeA8Ij3hPOA8IT0iPeE8Iz3iPOE8Ij0jPeI8JD3jPOI8Iz0kPeM8JT3kPOM8JD0lPeQ8Jj3lPOQ8JT0mPeU8Jz3mPOU8Jj0nPeY8KD3nPOY8Jz0oPec8KT3oPOc8KD0pPeg8Kj3pPOg8KT0qPek8Kz3qPOk8Kj0rPeo8LD3rPOo8Kz0sPes8LT3sPOs8LD0tPew8Lj3tPOw8LT0uPe08Lz3uPO08Lj0vPe48MD3vPO48Lz0wPfA8Mj3xPPA8MT0yPfE8Mz3yPPE8Mj0zPfI8ND3zPPI8Mz00PfM8NT30PPM8ND01PfQ8Nj31PPQ8NT02PfU8Nz32PPU8Nj03PfY8OD33PPY8Nz04Pfc8OT34PPc8OD05Pfg8Oj35PPg8OT06Pfk8Oz36PPk8Oj07Pfo8PD37PPo8Oz08Pfs8PT38PPs8PD09Pfw8Pj39PPw8PT0+Pf08Pz3+PP08Pj0/Pf48QD3/PP48Pz1APf88QT0APf88QD1BPQA9Qj0BPQA9QT1CPQE9Qz0CPQE9Qj1DPQI9RD0DPQI9Qz1EPQM9RT0EPQM9RD1FPQQ9Rj0FPQQ9RT1GPQU9Rz0GPQU9Rj1HPQY9SD0HPQY9Rz1IPQc9ST0IPQc9SD1JPQg9Sj0JPQg9ST1KPQk9Sz0KPQk9Sj1LPQo9TD0LPQo9Sz1MPQs9TT0MPQs9TD1NPQw9Tj0NPQw9TT1OPQ09Tz0OPQ09Tj1PPQ49UD0PPQ49Tz1QPQ89UT0QPQ89UD1RPRA9Uj0RPRA9UT1SPRE9Uz0SPRE9Uj1TPRI9VD0TPRI9Uz1UPRM9VT0UPRM9VD1VPRQ9Vj0VPRQ9VT1WPRU9Vz0WPRU9Vj1XPRY9WD0XPRY9Vz1YPRc9WT0YPRc9WD1ZPRg9Wj0ZPRg9WT1aPRk9Wz0aPRk9Wj1bPRo9XD0bPRo9Wz1cPRs9XT0cPRs9XD1dPRw9Xj0dPRw9XT1ePR09Xz0ePR09Xj1fPR49YD0fPR49Xz1gPR89YT0gPR89YD1hPSA9Yj0hPSA9YT1iPSE9Yz0iPSE9Yj1jPSI9ZD0jPSI9Yz1kPSM9ZT0kPSM9ZD1lPSQ9Zj0lPSQ9ZT1mPSU9Zz0mPSU9Zj1nPSY9aD0nPSY9Zz1oPSc9aT0oPSc9aD1pPSg9aj0pPSg9aT1qPSk9az0qPSk9aj1rPSo9bD0rPSo9az1sPSs9bT0sPSs9bD1tPSw9bj0tPSw9bT1uPS09bz0uPS09bj1vPS49cD0vPS49bz1wPS89cT0wPS89cD1xPTE9cz0yPTE9cj1zPTI9dD0zPTI9cz10PTM9dT00PTM9dD11PTQ9dj01PTQ9dT12PTU9dz02PTU9dj13PTY9eD03PTY9dz14PTc9eT04PTc9eD15PTg9ej05PTg9eT16PTk9ez06PTk9ej17PTo9fD07PTo9ez18PTs9fT08PTs9fD19PTw9fj09PTw9fT1+PT09fz0+PT09fj1/PT49gD0/PT49fz2APT89gT1APT89gD2BPUA9gj1BPUA9gT2CPUE9gz1CPUE9gj2DPUI9hD1DPUI9gz2EPUM9hT1EPUM9hD2FPUQ9hj1FPUQ9hT2GPUU9hz1GPUU9hj2HPUY9iD1HPUY9hz2IPUc9iT1IPUc9iD2JPUg9ij1JPUg9iT2KPUk9iz1KPUk9ij2LPUo9jD1LPUo9iz2MPUs9jT1MPUs9jD2NPUw9jj1NPUw9jT2OPU09jz1OPU09jj2PPU49kD1PPU49jz2QPU89kT1QPU89kD2RPVA9kj1RPVA9kT2SPVE9kz1SPVE9kj2TPVI9lD1TPVI9kz2UPVM9lT1UPVM9lD2VPVQ9lj1VPVQ9lT2WPVU9lz1WPVU9lj2XPVY9mD1XPVY9lz2YPVc9mT1YPVc9mD2ZPVg9mj1ZPVg9mT2aPVk9mz1aPVk9mj2bPVo9nD1bPVo9mz2cPVs9nT1cPVs9nD2dPVw9nj1dPVw9nT2ePV09nz1ePV09nj2fPV49oD1fPV49nz2gPV89oT1gPV89oD2hPWA9oj1hPWA9oT2iPWE9oz1iPWE9oj2jPWI9pD1jPWI9oz2kPWM9pT1kPWM9pD2lPWQ9pj1lPWQ9pT2mPWU9pz1mPWU9pj2nPWY9qD1nPWY9pz2oPWc9qT1oPWc9qD2pPWg9qj1pPWg9qT2qPWk9qz1qPWk9qj2rPWo9rD1rPWo9qz2sPWs9rT1sPWs9rD2tPWw9rj1tPWw9rT2uPW09rz1uPW09rj2vPW49sD1vPW49rz2wPW89sT1wPW89sD2xPXA9sj1xPXA9sT2yPXI9tD1zPXI9sz20PXM9tT10PXM9tD21PXQ9tj11PXQ9tT22PXU9tz12PXU9tj23PXY9uD13PXY9tz24PXc9uT14PXc9uD25PXg9uj15PXg9uT26PXk9uz16PXk9uj27PXo9vD17PXo9uz28PXs9vT18PXs9vD29PXw9vj19PXw9vT2+PX09vz1+PX09vj2/PX49wD1/PX49vz3APX89wT2APX89wD3BPYA9wj2BPYA9wT3CPYE9wz2CPYE9wj3DPYI9xD2DPYI9wz3EPYM9xT2EPYM9xD3FPYQ9xj2FPYQ9xT3GPYU9xz2GPYU9xj3HPYY9yD2HPYY9xz3IPYc9yT2IPYc9yD3JPYg9yj2JPYg9yT3KPYk9yz2KPYk9yj3LPYo9zD2LPYo9yz3MPYs9zT2MPYs9zD3NPYw9zj2NPYw9zT3OPY09zz2OPY09zj3PPY490D2PPY49zz3QPY890T2QPY890D3RPZA90j2RPZA90T3SPZE90z2SPZE90j3TPZI91D2TPZI90z3UPZM91T2UPZM91D3VPZQ91j2VPZQ91T3WPZU91z2WPZU91j3XPZY92D2XPZY91z3YPZc92T2YPZc92D3ZPZg92j2ZPZg92T3aPZk92z2aPZk92j3bPZo93D2bPZo92z3cPZs93T2cPZs93D3dPZw93j2dPZw93T3ePZ093z2ePZ093j3fPZ494D2fPZ493z3gPZ894T2gPZ894D3hPaA94j2hPaA94T3iPaE94z2iPaE94j3jPaI95D2jPaI94z3kPaM95T2kPaM95D3lPaQ95j2lPaQ95T3mPaU95z2mPaU95j3nPaY96D2nPaY95z3oPac96T2oPac96D3pPag96j2pPag96T3qPak96z2qPak96j3rPao97D2rPao96z3sPas97T2sPas97D3tPaw97j2tPaw97T3uPa097z2uPa097j3vPa498D2vPa497z3wPa898T2wPa898D3xPbA98j2xPbA98T3yPbE98z2yPbE98j3zPbM99T20PbM99D31PbQ99j21PbQ99T32PbU99z22PbU99j33PbY9+D23PbY99z34Pbc9+T24Pbc9+D35Pbg9+j25Pbg9+T36Pbk9+z26Pbk9+j37Pbo9/D27Pbo9+z38Pbs9/T28Pbs9/D39Pbw9/j29Pbw9/T3+Pb09/z2+Pb09/j3/Pb49AD6/Pb49/z0APr89AT7APb89AD4BPsA9Aj7BPcA9AT4CPsE9Az7CPcE9Aj4DPsI9BD7DPcI9Az4EPsM9BT7EPcM9BD4FPsQ9Bj7FPcQ9BT4GPsU9Bz7GPcU9Bj4HPsY9CD7HPcY9Bz4IPsc9CT7IPcc9CD4JPsg9Cj7JPcg9CT4KPsk9Cz7KPck9Cj4LPso9DD7LPco9Cz4MPss9DT7MPcs9DD4NPsw9Dj7NPcw9DT4OPs09Dz7OPc09Dj4PPs49ED7PPc49Dz4QPs89ET7QPc89ED4RPtA9Ej7RPdA9ET4SPtE9Ez7SPdE9Ej4TPtI9FD7TPdI9Ez4UPtM9FT7UPdM9FD4VPtQ9Fj7VPdQ9FT4WPtU9Fz7WPdU9Fj4XPtY9GD7XPdY9Fz4YPtc9GT7YPdc9GD4ZPtg9Gj7ZPdg9GT4aPtk9Gz7aPdk9Gj4bPto9HD7bPdo9Gz4cPts9HT7cPds9HD4dPtw9Hj7dPdw9HT4ePt09Hz7ePd09Hj4fPt49ID7fPd49Hz4gPt89IT7gPd89ID4hPuA9Ij7hPeA9IT4iPuE9Iz7iPeE9Ij4jPuI9JD7jPeI9Iz4kPuM9JT7kPeM9JD4lPuQ9Jj7lPeQ9JT4mPuU9Jz7mPeU9Jj4nPuY9KD7nPeY9Jz4oPuc9KT7oPec9KD4pPug9Kj7pPeg9KT4qPuk9Kz7qPek9Kj4rPuo9LD7rPeo9Kz4sPus9LT7sPes9LD4tPuw9Lj7tPew9LT4uPu09Lz7uPe09Lj4vPu49MD7vPe49Lz4wPu89MT7wPe89MD4xPvA9Mj7xPfA9MT4yPvE9Mz7yPfE9Mj4zPvI9ND7zPfI9Mz40PvQ9Nj71PfQ9NT42PvU9Nz72PfU9Nj43PvY9OD73PfY9Nz44Pvc9OT74Pfc9OD45Pvg9Oj75Pfg9OT46Pvk9Oz76Pfk9Oj47Pvo9PD77Pfo9Oz48Pvs9PT78Pfs9PD49Pvw9Pj79Pfw9PT4+Pv09Pz7+Pf09Pj4/Pv49QD7/Pf49Pz5APv89QT4APv89QD5BPgA+Qj4BPgA+QT5CPgE+Qz4CPgE+Qj5DPgI+RD4DPgI+Qz5EPgM+RT4EPgM+RD5FPgQ+Rj4FPgQ+RT5GPgU+Rz4GPgU+Rj5HPgY+SD4HPgY+Rz5IPgc+ST4IPgc+SD5JPgg+Sj4JPgg+ST5KPgk+Sz4KPgk+Sj5LPgo+TD4LPgo+Sz5MPgs+TT4MPgs+TD5NPgw+Tj4NPgw+TT5OPg0+Tz4OPg0+Tj5PPg4+UD4PPg4+Tz5QPg8+UT4QPg8+UD5RPhA+Uj4RPhA+UT5SPhE+Uz4SPhE+Uj5TPhI+VD4TPhI+Uz5UPhM+VT4UPhM+VD5VPhQ+Vj4VPhQ+VT5WPhU+Vz4WPhU+Vj5XPhY+WD4XPhY+Vz5YPhc+WT4YPhc+WD5ZPhg+Wj4ZPhg+WT5aPhk+Wz4aPhk+Wj5bPho+XD4bPho+Wz5cPhs+XT4cPhs+XD5dPhw+Xj4dPhw+XT5ePh0+Xz4ePh0+Xj5fPh4+YD4fPh4+Xz5gPh8+YT4gPh8+YD5hPiA+Yj4hPiA+YT5iPiE+Yz4iPiE+Yj5jPiI+ZD4jPiI+Yz5kPiM+ZT4kPiM+ZD5lPiQ+Zj4lPiQ+ZT5mPiU+Zz4mPiU+Zj5nPiY+aD4nPiY+Zz5oPic+aT4oPic+aD5pPig+aj4pPig+aT5qPik+az4qPik+aj5rPio+bD4rPio+az5sPis+bT4sPis+bD5tPiw+bj4tPiw+bT5uPi0+bz4uPi0+bj5vPi4+cD4vPi4+bz5wPi8+cT4wPi8+cD5xPjA+cj4xPjA+cT5yPjE+cz4yPjE+cj5zPjI+dD4zPjI+cz50PjM+dT40PjM+dD51PjU+dz42PjU+dj53PjY+eD43PjY+dz54Pjc+eT44Pjc+eD55Pjg+ej45Pjg+eT56Pjk+ez46Pjk+ej57Pjo+fD47Pjo+ez58Pjs+fT48Pjs+fD59Pjw+fj49Pjw+fT5+Pj0+fz4+Pj0+fj5/Pj4+gD4/Pj4+fz6APj8+gT5APj8+gD6BPkA+gj5BPkA+gT6CPkE+gz5CPkE+gj6DPkI+hD5DPkI+gz6EPkM+hT5EPkM+hD6FPkQ+hj5FPkQ+hT6GPkU+hz5GPkU+hj6HPkY+iD5HPkY+hz6IPkc+iT5IPkc+iD6JPkg+ij5JPkg+iT6KPkk+iz5KPkk+ij6LPko+jD5LPko+iz6MPks+jT5MPks+jD6NPkw+jj5NPkw+jT6OPk0+jz5OPk0+jj6PPk4+kD5PPk4+jz6QPk8+kT5QPk8+kD6RPlA+kj5RPlA+kT6SPlE+kz5SPlE+kj6TPlI+lD5TPlI+kz6UPlM+lT5UPlM+lD6VPlQ+lj5VPlQ+lT6WPlU+lz5WPlU+lj6XPlY+mD5XPlY+lz6YPlc+mT5YPlc+mD6ZPlg+mj5ZPlg+mT6aPlk+mz5aPlk+mj6bPlo+nD5bPlo+mz6cPls+nT5cPls+nD6dPlw+nj5dPlw+nT6ePl0+nz5ePl0+nj6fPl4+oD5fPl4+nz6gPl8+oT5gPl8+oD6hPmA+oj5hPmA+oT6iPmE+oz5iPmE+oj6jPmI+pD5jPmI+oz6kPmM+pT5kPmM+pD6lPmQ+pj5lPmQ+pT6mPmU+pz5mPmU+pj6nPmY+qD5nPmY+pz6oPmc+qT5oPmc+qD6pPmg+qj5pPmg+qT6qPmk+qz5qPmk+qj6rPmo+rD5rPmo+qz6sPms+rT5sPms+rD6tPmw+rj5tPmw+rT6uPm0+rz5uPm0+rj6vPm4+sD5vPm4+rz6wPm8+sT5wPm8+sD6xPnA+sj5xPnA+sT6yPnE+sz5yPnE+sj6zPnI+tD5zPnI+sz60PnM+tT50PnM+tD61PnQ+tj51PnQ+tT62PnY+uD53PnY+tz64Pnc+uT54Pnc+uD65Png+uj55Png+uT66Pnk+uz56Pnk+uj67Pno+vD57Pno+uz68Pns+vT58Pns+vD69Pnw+vj59Pnw+vT6+Pn0+vz5+Pn0+vj6/Pn4+wD5/Pn4+vz7APn8+wT6APn8+wD7BPoA+wj6BPoA+wT7CPoE+wz6CPoE+wj7DPoI+xD6DPoI+wz7EPoM+xT6EPoM+xD7FPoQ+xj6FPoQ+xT7GPoU+xz6GPoU+xj7HPoY+yD6HPoY+xz7IPoc+yT6IPoc+yD7JPog+yj6JPog+yT7KPok+yz6KPok+yj7LPoo+zD6LPoo+yz7MPos+zT6MPos+zD7NPow+zj6NPow+zT7OPo0+zz6OPo0+zj7PPo4+0D6PPo4+zz7QPo8+0T6QPo8+0D7RPpA+0j6RPpA+0T7SPpE+0z6SPpE+0j7TPpI+1D6TPpI+0z7UPpM+1T6UPpM+1D7VPpQ+1j6VPpQ+1T7WPpU+1z6WPpU+1j7XPpY+2D6XPpY+1z7YPpc+2T6YPpc+2D7ZPpg+2j6ZPpg+2T7aPpk+2z6aPpk+2j7bPpo+3D6bPpo+2z7cPps+3T6cPps+3D7dPpw+3j6dPpw+3T7ePp0+3z6ePp0+3j7fPp4+4D6fPp4+3z7gPp8+4T6gPp8+4D7hPqA+4j6hPqA+4T7iPqE+4z6iPqE+4j7jPqI+5D6jPqI+4z7kPqM+5T6kPqM+5D7lPqQ+5j6lPqQ+5T7mPqU+5z6mPqU+5j7nPqY+6D6nPqY+5z7oPqc+6T6oPqc+6D7pPqg+6j6pPqg+6T7qPqk+6z6qPqk+6j7rPqo+7D6rPqo+6z7sPqs+7T6sPqs+7D7tPqw+7j6tPqw+7T7uPq0+7z6uPq0+7j7vPq4+8D6vPq4+7z7wPq8+8T6wPq8+8D7xPrA+8j6xPrA+8T7yPrE+8z6yPrE+8j7zPrI+9D6zPrI+8z70PrM+9T60PrM+9D71PrQ+9j61PrQ+9T72PrU+9z62PrU+9j73Prc++T64Prc++D75Prg++j65Prg++T76Prk++z66Prk++j77Pro+/D67Pro++z78Prs+/T68Prs+/D79Prw+/j69Prw+/T7+Pr0+/z6+Pr0+/j7/Pr4+AD+/Pr4+/z4AP78+AT/APr8+AD8BP8A+Aj/BPsA+AT8CP8E+Az/CPsE+Aj8DP8I+BD/DPsI+Az8EP8M+BT/EPsM+BD8FP8Q+Bj/FPsQ+BT8GP8U+Bz/GPsU+Bj8HP8Y+CD/HPsY+Bz8IP8c+CT/IPsc+CD8JP8g+Cj/JPsg+CT8KP8k+Cz/KPsk+Cj8LP8o+DD/LPso+Cz8MP8s+DT/MPss+DD8NP8w+Dj/NPsw+DT8OP80+Dz/OPs0+Dj8PP84+ED/PPs4+Dz8QP88+ET/QPs8+ED8RP9A+Ej/RPtA+ET8SP9E+Ez/SPtE+Ej8TP9I+FD/TPtI+Ez8UP9M+FT/UPtM+FD8VP9Q+Fj/VPtQ+FT8WP9U+Fz/WPtU+Fj8XP9Y+GD/XPtY+Fz8YP9c+GT/YPtc+GD8ZP9g+Gj/ZPtg+GT8aP9k+Gz/aPtk+Gj8bP9o+HD/bPto+Gz8cP9s+HT/cPts+HD8dP9w+Hj/dPtw+HT8eP90+Hz/ePt0+Hj8fP94+ID/fPt4+Hz8gP98+IT/gPt8+ID8hP+A+Ij/hPuA+IT8iP+E+Iz/iPuE+Ij8jP+I+JD/jPuI+Iz8kP+M+JT/kPuM+JD8lP+Q+Jj/lPuQ+JT8mP+U+Jz/mPuU+Jj8nP+Y+KD/nPuY+Jz8oP+c+KT/oPuc+KD8pP+g+Kj/pPug+KT8qP+k+Kz/qPuk+Kj8rP+o+LD/rPuo+Kz8sP+s+LT/sPus+LD8tP+w+Lj/tPuw+LT8uP+0+Lz/uPu0+Lj8vP+4+MD/vPu4+Lz8wP+8+MT/wPu8+MD8xP/A+Mj/xPvA+MT8yP/E+Mz/yPvE+Mj8zP/I+ND/zPvI+Mz80P/M+NT/0PvM+ND81P/Q+Nj/1PvQ+NT82P/U+Nz/2PvU+Nj83P/Y+OD/3PvY+Nz84P/g+Oj/5Pvg+OT86P/k+Oz/6Pvk+Oj87P/o+PD/7Pvo+Oz88P/s+PT/8Pvs+PD89P/w+Pj/9Pvw+PT8+P/0+Pz/+Pv0+Pj8/P/4+QD//Pv4+Pz9AP/8+QT8AP/8+QD9BPwA/Qj8BPwA/QT9CPwE/Qz8CPwE/Qj9DPwI/RD8DPwI/Qz9EPwM/RT8EPwM/RD9FPwQ/Rj8FPwQ/RT9GPwU/Rz8GPwU/Rj9HPwY/SD8HPwY/Rz9IPwc/ST8IPwc/SD9JPwg/Sj8JPwg/ST9KPwk/Sz8KPwk/Sj9LPwo/TD8LPwo/Sz9MPws/TT8MPws/TD9NPww/Tj8NPww/TT9OPw0/Tz8OPw0/Tj9PPw4/UD8PPw4/Tz9QPw8/UT8QPw8/UD9RPxA/Uj8RPxA/UT9SPxE/Uz8SPxE/Uj9TPxI/VD8TPxI/Uz9UPxM/VT8UPxM/VD9VPxQ/Vj8VPxQ/VT9WPxU/Vz8WPxU/Vj9XPxY/WD8XPxY/Vz9YPxc/WT8YPxc/WD9ZPxg/Wj8ZPxg/WT9aPxk/Wz8aPxk/Wj9bPxo/XD8bPxo/Wz9cPxs/XT8cPxs/XD9dPxw/Xj8dPxw/XT9ePx0/Xz8ePx0/Xj9fPx4/YD8fPx4/Xz9gPx8/YT8gPx8/YD9hPyA/Yj8hPyA/YT9iPyE/Yz8iPyE/Yj9jPyI/ZD8jPyI/Yz9kPyM/ZT8kPyM/ZD9lPyQ/Zj8lPyQ/ZT9mPyU/Zz8mPyU/Zj9nPyY/aD8nPyY/Zz9oPyc/aT8oPyc/aD9pPyg/aj8pPyg/aT9qPyk/az8qPyk/aj9rPyo/bD8rPyo/az9sPys/bT8sPys/bD9tPyw/bj8tPyw/bT9uPy0/bz8uPy0/bj9vPy4/cD8vPy4/bz9wPy8/cT8wPy8/cD9xPzA/cj8xPzA/cT9yPzE/cz8yPzE/cj9zPzI/dD8zPzI/cz90PzM/dT80PzM/dD91PzQ/dj81PzQ/dT92PzU/dz82PzU/dj93PzY/eD83PzY/dz94Pzc/eT84Pzc/eD95Pzk/ez86Pzk/ej97Pzo/fD87Pzo/ez98Pzs/fT88Pzs/fD99Pzw/fj89Pzw/fT9+Pz0/fz8+Pz0/fj9/Pz4/gD8/Pz4/fz+APz8/gT9APz8/gD+BP0A/gj9BP0A/gT+CP0E/gz9CP0E/gj+DP0I/hD9DP0I/gz+EP0M/hT9EP0M/hD+FP0Q/hj9FP0Q/hT+GP0U/hz9GP0U/hj+HP0Y/iD9HP0Y/hz+IP0c/iT9IP0c/iD+JP0g/ij9JP0g/iT+KP0k/iz9KP0k/ij+LP0o/jD9LP0o/iz+MP0s/jT9MP0s/jD+NP0w/jj9NP0w/jT+OP00/jz9OP00/jj+PP04/kD9PP04/jz+QP08/kT9QP08/kD+RP1A/kj9RP1A/kT+SP1E/kz9SP1E/kj+TP1I/lD9TP1I/kz+UP1M/lT9UP1M/lD+VP1Q/lj9VP1Q/lT+WP1U/lz9WP1U/lj+XP1Y/mD9XP1Y/lz+YP1c/mT9YP1c/mD+ZP1g/mj9ZP1g/mT+aP1k/mz9aP1k/mj+bP1o/nD9bP1o/mz+cP1s/nT9cP1s/nD+dP1w/nj9dP1w/nT+eP10/nz9eP10/nj+fP14/oD9fP14/nz+gP18/oT9gP18/oD+hP2A/oj9hP2A/oT+iP2E/oz9iP2E/oj+jP2I/pD9jP2I/oz+kP2M/pT9kP2M/pD+lP2Q/pj9lP2Q/pT+mP2U/pz9mP2U/pj+nP2Y/qD9nP2Y/pz+oP2c/qT9oP2c/qD+pP2g/qj9pP2g/qT+qP2k/qz9qP2k/qj+rP2o/rD9rP2o/qz+sP2s/rT9sP2s/rD+tP2w/rj9tP2w/rT+uP20/rz9uP20/rj+vP24/sD9vP24/rz+wP28/sT9wP28/sD+xP3A/sj9xP3A/sT+yP3E/sz9yP3E/sj+zP3I/tD9zP3I/sz+0P3M/tT90P3M/tD+1P3Q/tj91P3Q/tT+2P3U/tz92P3U/tj+3P3Y/uD93P3Y/tz+4P3c/uT94P3c/uD+5P3g/uj95P3g/uT+6P3o/vD97P3o/uz+8P3s/vT98P3s/vD+9P3w/vj99P3w/vT++P30/vz9+P30/vj+/P34/wD9/P34/vz/AP38/wT+AP38/wD/BP4A/wj+BP4A/wT/CP4E/wz+CP4E/wj/DP4I/xD+DP4I/wz/EP4M/xT+EP4M/xD/FP4Q/xj+FP4Q/xT/GP4U/xz+GP4U/xj/HP4Y/yD+HP4Y/xz/IP4c/yT+IP4c/yD/JP4g/yj+JP4g/yT/KP4k/yz+KP4k/yj/LP4o/zD+LP4o/yz/MP4s/zT+MP4s/zD/NP4w/zj+NP4w/zT/OP40/zz+OP40/zj/PP44/0D+PP44/zz/QP48/0T+QP48/0D/RP5A/0j+RP5A/0T/SP5E/0z+SP5E/0j/TP5I/1D+TP5I/0z/UP5M/1T+UP5M/1D/VP5Q/1j+VP5Q/1T/WP5U/1z+WP5U/1j/XP5Y/2D+XP5Y/1z/YP5c/2T+YP5c/2D/ZP5g/2j+ZP5g/2T/aP5k/2z+aP5k/2j/bP5o/3D+bP5o/2z/cP5s/3T+cP5s/3D/dP5w/3j+dP5w/3T/eP50/3z+eP50/3j/fP54/4D+fP54/3z/gP58/4T+gP58/4D/hP6A/4j+hP6A/4T/iP6E/4z+iP6E/4j/jP6I/5D+jP6I/4z/kP6M/5T+kP6M/5D/lP6Q/5j+lP6Q/5T/mP6U/5z+mP6U/5j/nP6Y/6D+nP6Y/5z/oP6c/6T+oP6c/6D/pP6g/6j+pP6g/6T/qP6k/6z+qP6k/6j/rP6o/7D+rP6o/6z/sP6s/7T+sP6s/7D/tP6w/7j+tP6w/7T/uP60/7z+uP60/7j/vP64/8D+vP64/7z/wP68/8T+wP68/8D/xP7A/8j+xP7A/8T/yP7E/8z+yP7E/8j/zP7I/9D+zP7I/8z/0P7M/9T+0P7M/9D/1P7Q/9j+1P7Q/9T/2P7U/9z+2P7U/9j/3P7Y/+D+3P7Y/9z/4P7c/+T+4P7c/+D/5P7g/+j+5P7g/+T/6P7k/+z+6P7k/+j/7P7s//T+8P7s//D/9P7w//j+9P7w//T/+P70//z++P70//j//P74/AEC/P74//z8AQL8/AUDAP78/AEABQMA/AkDBP8A/AUACQME/A0DCP8E/AkADQMI/BEDDP8I/A0AEQMM/BUDEP8M/BEAFQMQ/BkDFP8Q/BUAGQMU/B0DGP8U/BkAHQMY/CEDHP8Y/B0AIQMc/CUDIP8c/CEAJQMg/CkDJP8g/CUAKQMk/C0DKP8k/CkALQMo/DEDLP8o/C0AMQMs/DUDMP8s/DEANQMw/DkDNP8w/DUAOQM0/D0DOP80/DkAPQM4/EEDPP84/D0AQQM8/EUDQP88/EEARQNA/EkDRP9A/EUASQNE/E0DSP9E/EkATQNI/FEDTP9I/E0AUQNM/FUDUP9M/FEAVQNQ/FkDVP9Q/FUAWQNU/F0DWP9U/FkAXQNY/GEDXP9Y/F0AYQNc/GUDYP9c/GEAZQNg/GkDZP9g/GUAaQNk/G0DaP9k/GkAbQNo/HEDbP9o/G0AcQNs/HUDcP9s/HEAdQNw/HkDdP9w/HUAeQN0/H0DeP90/HkAfQN4/IEDfP94/H0AgQN8/IUDgP98/IEAhQOA/IkDhP+A/IUAiQOE/I0DiP+E/IkAjQOI/JEDjP+I/I0AkQOM/JUDkP+M/JEAlQOQ/JkDlP+Q/JUAmQOU/J0DmP+U/JkAnQOY/KEDnP+Y/J0AoQOc/KUDoP+c/KEApQOg/KkDpP+g/KUAqQOk/K0DqP+k/KkArQOo/LEDrP+o/K0AsQOs/LUDsP+s/LEAtQOw/LkDtP+w/LUAuQO0/L0DuP+0/LkAvQO4/MEDvP+4/L0AwQO8/MUDwP+8/MEAxQPA/MkDxP/A/MUAyQPE/M0DyP/E/MkAzQPI/NEDzP/I/M0A0QPM/NUD0P/M/NEA1QPQ/NkD1P/Q/NUA2QPU/N0D2P/U/NkA3QPY/OED3P/Y/N0A4QPc/OUD4P/c/OEA5QPg/OkD5P/g/OUA6QPk/O0D6P/k/OkA7QPo/PED7P/o/O0A8QPw/PkD9P/w/PUA+QP0/P0D+P/0/PkA/QP4/QED/P/4/P0BAQP8/QUAAQP8/QEBBQABAQkABQABAQUBCQAFAQ0ACQAFAQkBDQAJAREADQAJAQ0BEQANARUAEQANAREBFQARARkAFQARARUBGQAVAR0AGQAVARkBHQAZASEAHQAZAR0BIQAdASUAIQAdASEBJQAhASkAJQAhASUBKQAlAS0AKQAlASkBLQApATEALQApAS0BMQAtATUAMQAtATEBNQAxATkANQAxATUBOQA1AT0AOQA1ATkBPQA5AUEAPQA5AT0BQQA9AUUAQQA9AUEBRQBBAUkARQBBAUUBSQBFAU0ASQBFAUkBTQBJAVEATQBJAU0BUQBNAVUAUQBNAVEBVQBRAVkAVQBRAVUBWQBVAV0AWQBVAVkBXQBZAWEAXQBZAV0BYQBdAWUAYQBdAWEBZQBhAWkAZQBhAWUBaQBlAW0AaQBlAWkBbQBpAXEAbQBpAW0BcQBtAXUAcQBtAXEBdQBxAXkAdQBxAXUBeQB1AX0AeQB1AXkBfQB5AYEAfQB5AX0BgQB9AYUAgQB9AYEBhQCBAYkAhQCBAYUBiQCFAY0AiQCFAYkBjQCJAZEAjQCJAY0BkQCNAZUAkQCNAZEBlQCRAZkAlQCRAZUBmQCVAZ0AmQCVAZkBnQCZAaEAnQCZAZ0BoQCdAaUAoQCdAaEBpQChAakApQChAaUBqQClAa0AqQClAakBrQCpAbEArQCpAa0BsQCtAbUAsQCtAbEBtQCxAbkAtQCxAbUBuQC1Ab0AuQC1AbkBvQC5AcEAvQC5Ab0BwQC9AcUAwQC9AcEBxQDBAckAxQDBAcUByQDFAc0AyQDFAckBzQDJAdEAzQDJAc0B0QDNAdUA0QDNAdEB1QDRAdkA1QDRAdUB2QDVAd0A2QDVAdkB3QDZAeEA3QDZAd0B4QDdAeUA4QDdAeEB5QDhAekA5QDhAeUB6QDlAe0A6QDlAekB7QDpAfEA7QDpAe0B8QDtAfUA8QDtAfEB9QD1Af0A+QD1AfkB/QD5AgEA/QD5Af0CAQD9AgUBAQD9AgECBQEBAgkBBQEBAgUCCQEFAg0BCQEFAgkCDQEJAhEBDQEJAg0CEQENAhUBEQENAhECFQERAhkBFQERAhUCGQEVAh0BGQEVAhkCHQEZAiEBHQEZAh0CIQEdAiUBIQEdAiECJQEhAikBJQEhAiUCKQElAi0BKQElAikCLQEpAjEBLQEpAi0CMQEtAjUBMQEtAjECNQExAjkBNQExAjUCOQE1Aj0BOQE1AjkCPQE5AkEBPQE5Aj0CQQE9AkUBQQE9AkECRQFBAkkBRQFBAkUCSQFFAk0BSQFFAkkCTQFJAlEBTQFJAk0CUQFNAlUBUQFNAlECVQFRAlkBVQFRAlUCWQFVAl0BWQFVAlkCXQFZAmEBXQFZAl0CYQFdAmUBYQFdAmECZQFhAmkBZQFhAmUCaQFlAm0BaQFlAmkCbQFpAnEBbQFpAm0CcQFtAnUBcQFtAnECdQFxAnkBdQFxAnUCeQF1An0BeQF1AnkCfQF5AoEBfQF5An0CgQF9AoUBgQF9AoEChQGBAokBhQGBAoUCiQGFAo0BiQGFAokCjQGJApEBjQGJAo0CkQGNApUBkQGNApEClQGRApkBlQGRApUCmQGVAp0BmQGVApkCnQGZAqEBnQGZAp0CoQGdAqUBoQGdAqECpQGhAqkBpQGhAqUCqQGlAq0BqQGlAqkCrQGpArEBrQGpAq0CsQGtArUBsQGtArECtQGxArkBtQGxArUCuQG1Ar0BuQG1ArkCvQG5AsEBvQG5Ar0CwQG9AsUBwQG9AsECxQHBAskBxQHBAsUCyQHFAs0ByQHFAskCzQHJAtEBzQHJAs0C0QHNAtUB0QHNAtEC1QHRAtkB1QHRAtUC2QHVAt0B2QHVAtkC3QHZAuEB3QHZAt0C4QHdAuUB4QHdAuEC5QHhAukB5QHhAuUC6QHlAu0B6QHlAukC7QHpAvEB7QHpAu0C8QHtAvUB8QHtAvEC9QHxAvkB9QHxAvUC+QH5AwEB/QH5Av0DAQH9AwUCAQH9AwEDBQIBAwkCBQIBAwUDCQIFAw0CCQIFAwkDDQIJAxECDQIJAw0DEQINAxUCEQINAxEDFQIRAxkCFQIRAxUDGQIVAx0CGQIVAxkDHQIZAyECHQIZAx0DIQIdAyUCIQIdAyEDJQIhAykCJQIhAyUDKQIlAy0CKQIlAykDLQIpAzECLQIpAy0DMQItAzUCMQItAzEDNQIxAzkCNQIxAzUDOQI1Az0COQI1AzkDPQI5A0ECPQI5Az0DQQI9A0UCQQI9A0EDRQJBA0kCRQJBA0UDSQJFA00CSQJFA0kDTQJJA1ECTQJJA00DUQJNA1UCUQJNA1EDVQJRA1kCVQJRA1UDWQJVA10CWQJVA1kDXQJZA2ECXQJZA10DYQJdA2UCYQJdA2EDZQJhA2kCZQJhA2UDaQJlA20CaQJlA2kDbQJpA3ECbQJpA20DcQJtA3UCcQJtA3EDdQJxA3kCdQJxA3UDeQJ1A30CeQJ1A3kDfQJ5A4ECfQJ5A30DgQJ9A4UCgQJ9A4EDhQKBA4kChQKBA4UDiQKFA40CiQKFA4kDjQKJA5ECjQKJA40DkQKNA5UCkQKNA5EDlQKRA5kClQKRA5UDmQKVA50CmQKVA5kDnQKZA6ECnQKZA50DoQKdA6UCoQKdA6EDpQKhA6kCpQKhA6UDqQKlA60CqQKlA6kDrQKpA7ECrQKpA60DsQKtA7UCsQKtA7EDtQKxA7kCtQKxA7UDuQK1A70CuQK1A7kDvQK5A8ECvQK5A70DwQK9A8UCwQK9A8EDxQLBA8kCxQLBA8UDyQLFA80CyQLFA8kDzQLJA9ECzQLJA80D0QLNA9UC0QLNA9ED1QLRA9kC1QLRA9UD2QLVA90C2QLVA9kD3QLZA+EC3QLZA90D4QLdA+UC4QLdA+ED5QLhA+kC5QLhA+UD6QLlA+0C6QLlA+kD7QLpA/EC7QLpA+0D8QLtA/UC8QLtA/ED9QLxA/kC9QLxA/UD+QL1A/0C+QL1A/kD/QL9AQRDAQL9AQBBBEMBAQhDBQMBAQRBCEMFAQxDCQMFAQhBDEMJARBDDQMJAQxBEEMNARRDEQMNARBBFEMRARhDFQMRARRBGEMVARxDGQMVARhBHEMZASBDHQMZARxBIEMdASRDIQMdASBBJEMhAShDJQMhASRBKEMlASxDKQMlAShBLEMpATBDLQMpASxBMEMtATRDMQMtATBBNEMxAThDNQMxATRBOEM1ATxDOQM1AThBPEM5AUBDPQM5ATxBQEM9AURDQQM9AUBBRENBAUhDRQNBAURBSENFAUxDSQNFAUhBTENJAVBDTQNJAUxBUENNAVRDUQNNAVBBVENRAVhDVQNRAVRBWENVAVxDWQNVAVhBXENZAWBDXQNZAVxBYENdAWRDYQNdAWBBZENhAWhDZQNhAWRBaENlAWxDaQNlAWhBbENpAXBDbQNpAWxBcENtAXRDcQNtAXBBdENxAXhDdQNxAXRBeEN1AXxDeQN1AXhBfEN5AYBDfQN5AXxBgEN9AYRDgQN9AYBBhEOBAYhDhQOBAYRBiEOFAYxDiQOFAYhBjEOJAZBDjQOJAYxBkEONAZRDkQONAZBBlEORAZhDlQORAZRBmEOVAZxDmQOVAZhBnEOZAaBDnQOZAZxBoEOdAaRDoQOdAaBBpEOhAahDpQOhAaRBqEOlAaxDqQOlAahBrEOpAbBDrQOpAaxBsEOtAbRDsQOtAbBBtEOxAbhDtQOxAbRBuEO1AbxDuQO1AbhBvEO5AcBDvQO5AbxBwEO9AcRDwQO9AcBBxEPBAchDxQPBAcRByEPFAcxDyQPFAchBzEPJAdBDzQPJAcxB0EPNAdRD0QPNAdBB1EPRAdhD1QPRAdRB2EPVAdxD2QPVAdhB3EPZAeBD3QPZAdxB4EPdAeRD4QPdAeBB5EPhAehD5QPhAeRB6EPlAexD6QPlAehB7EPpAfBD7QPpAexB8EPtAfRD8QPtAfBB9EPxAfhD9QPxAfRB+EP1AfxD+QP1AfhB/EP5AgBD/QP5AfxCAEIAgAEHBIIAgPyAAQcEgAUECIcEgAEEBQQIhAkFDIQIhAUECQUMhA0GEIUMhAkEDQYQhBEHFIYQhA0EEQcUhBUEGIsUhBEEFQQYiBkFHIgYiBUEGQUciB0GIIkciBkEHQYgiCEHJIogiB0EIQckiCUEKI8kiCEEJQQojCkFLIwojCUEKQUsjC0GMI0sjCkELQYwjDEHNI4wjC0EMQc0jDUEOJM0jDEENQQ4kDkFPJA4kDUEOQU8kD0GQJE8kDkEPQZAkEEHRJJAkD0EQQdEkEUESJdEkEEERQRIlEkFTJRIlEUESQVMlE0GUJVMlEkETQZQlFEHVJZQlE0EUQdUlFUEWJtUlFEEVQRYmFkFXJhYmFUEWQVcmF0GYJlcmFkEXQZgmGEHZJpgmF0EYQdkmGUEaJ9kmGEEZQRonGkFbJxonGUEaQVsnG0GcJ1snGkEbQZwnHEHdJ5wnG0EcQd0nHUEeKN0nHEEdQR4oHkFfKB4oHUEeQV8oH0GgKF8oHkEfQaAoIEHhKKAoH0EgQeEoIUEiKeEoIEEhQSIpIkFjKSIpIUEiQWMpI0GkKWMpIkEjQaQpJEHlKaQpI0EkQeUpJUEmKuUpJEElQSYqJkFnKiYqJUEmQWcqJ0GoKmcqJkEnQagqKEHpKqgqJ0EoQekqKUEqK+kqKEEpQSorKkFrKyorKUEqQWsrK0GsK2srKkErQawrLEHtK6wrK0EsQe0rLUEuLO0rLEEtQS4sLkFvLC4sLUEuQW8sL0GwLG8sLkEvQbAsMEHxLLAsL0EwQfEsMUEyLfEsMEExQTItMkFzLTItMUEyQXMtM0G0LXMtMkEzQbQtNEH1LbQtM0E0QfUtNUE2LvUtNEE1QTYuNkF3LjYuNUE2QXcuN0G4LncuNkE3QbguOEH5LrguN0E4QfkuOUE6L/kuOEE5QTovOkF7LzovOUE6QXsvO0G8L3svOkE7QbwvPEH9L7wvO0E8Qf0vPUE+MP0vPEE9QT4wPkF/MD4wPUE+QX8wQQAAAH8wPkFBAD8gP0EAQT8g/h8/QQBBQEEBQQBBP0FAQQFBQUECQQFBQEFBQQJBQkEDQQJBQUFCQQNBQ0EEQQNBQkFDQQRBREEFQQRBQ0FEQQVBRUEGQQVBREFFQQZBRkEHQQZBRUFGQQdBR0EIQQdBRkFHQQhBSEEJQQhBR0FIQQlBSUEKQQlBSEFJQQpBSkELQQpBSUFKQQtBS0EMQQtBSkFLQQxBTEENQQxBS0FMQQ1BTUEOQQ1BTEFNQQ5BTkEPQQ5BTUFOQQ9BT0EQQQ9BTkFPQRBBUEERQRBBT0FQQRFBUUESQRFBUEFRQRJBUkETQRJBUUFSQRNBU0EUQRNBUkFTQRRBVEEVQRRBU0FUQRVBVUEWQRVBVEFVQRZBVkEXQRZBVUFWQRdBV0EYQRdBVkFXQRhBWEEZQRhBV0FYQRlBWUEaQRlBWEFZQRpBWkEbQRpBWUFaQRtBW0EcQRtBWkFbQRxBXEEdQRxBW0FcQR1BXUEeQR1BXEFdQR5BXkEfQR5BXUFeQR9BX0EgQR9BXkFfQSBBYEEhQSBBX0FgQSFBYUEiQSFBYEFhQSJBYkEjQSJBYUFiQSNBY0EkQSNBYkFjQSRBZEElQSRBY0FkQSVBZUEmQSVBZEFlQSZBZkEnQSZBZUFmQSdBZ0EoQSdBZkFnQShBaEEpQShBZ0FoQSlBaUEqQSlBaEFpQSpBakErQSpBaUFqQStBa0EsQStBakFrQSxBbEEtQSxBa0FsQS1BbUEuQS1BbEFtQS5BbkEvQS5BbUFuQS9Bb0EwQS9BbkFvQTBBcEExQTBBb0FwQTFBcUEyQTFBcEFxQTJBckEzQTJBcUFyQTNBc0E0QTNBckFzQTRBdEE1QTRBc0F0QTVBdUE2QTVBdEF1QTZBdkE3QTZBdUF2QTdBd0E4QTdBdkF3QThBeEE5QThBd0F4QTlBeUE6QTlBeEF5QTpBekE7QTpBeUF6QTtBe0E8QTtBekF7QTxBfEE9QTxBe0F8QT1BfUE+QT1BfEF9QT5BggBBAD5BfUGCAP4ffkE/Qf4fvR9+QT9Bf0FAQT9BfkF/QUBBgEFBQUBBf0GAQUFBgUFCQUFBgEGBQUJBgkFDQUJBgUGCQUNBg0FEQUNBgkGDQURBhEFFQURBg0GEQUVBhUFGQUVBhEGFQUZBhkFHQUZBhUGGQUdBh0FIQUdBhkGHQUhBiEFJQUhBh0GIQUlBiUFKQUlBiEGJQUpBikFLQUpBiUGKQUtBi0FMQUtBikGLQUxBjEFNQUxBi0GMQU1BjUFOQU1BjEGNQU5BjkFPQU5BjUGOQU9Bj0FQQU9BjkGPQVBBkEFRQVBBj0GQQVFBkUFSQVFBkEGRQVJBkkFTQVJBkUGSQVNBk0FUQVNBkkGTQVRBlEFVQVRBk0GUQVVBlUFWQVVBlEGVQVZBlkFXQVZBlUGWQVdBl0FYQVdBlkGXQVhBmEFZQVhBl0GYQVlBmUFaQVlBmEGZQVpBmkFbQVpBmUGaQVtBm0FcQVtBmkGbQVxBnEFdQVxBm0GcQV1BnUFeQV1BnEGdQV5BnkFfQV5BnUGeQV9Bn0FgQV9BnkGfQWBBoEFhQWBBn0GgQWFBoUFiQWFBoEGhQWJBokFjQWJBoUGiQWNBo0FkQWNBokGjQWRBpEFlQWRBo0GkQWVBpUFmQWVBpEGlQWZBpkFnQWZBpUGmQWdBp0FoQWdBpkGnQWhBqEFpQWhBp0GoQWlBqUFqQWlBqEGpQWpBqkFrQWpBqUGqQWtBq0FsQWtBqkGrQWxBrEFtQWxBq0GsQW1BrUFuQW1BrEGtQW5BrkFvQW5BrUGuQW9Br0FwQW9BrkGvQXBBsEFxQXBBr0GwQXFBsUFyQXFBsEGxQXJBskFzQXJBsUGyQXNBs0F0QXNBskGzQXRBtEF1QXRBs0G0QXVBtUF2QXVBtEG1QXZBtkF3QXZBtUG2QXdBt0F4QXdBtkG3QXhBuEF5QXhBt0G4QXlBuUF6QXlBuEG5QXpBukF7QXpBuUG6QXtBu0F8QXtBukG7QXxBvEF9QXxBu0G8QX1BwwCCAH1BvEHDAL0fvUF+Qb0ffB+9QX5BvkF/QX5BvUG+QX9Bv0GAQX9BvkG/QYBBwEGBQYBBv0HAQYFBwUGCQYFBwEHBQYJBwkGDQYJBwUHCQYNBw0GEQYNBwkHDQYRBxEGFQYRBw0HEQYVBxUGGQYVBxEHFQYZBxkGHQYZBxUHGQYdBx0GIQYdBxkHHQYhByEGJQYhBx0HIQYlByUGKQYlByEHJQYpBykGLQYpByUHKQYtBy0GMQYtBykHLQYxBzEGNQYxBy0HMQY1BzUGOQY1BzEHNQY5BzkGPQY5BzUHOQY9Bz0GQQY9BzkHPQZBB0EGRQZBBz0HQQZFB0UGSQZFB0EHRQZJB0kGTQZJB0UHSQZNB00GUQZNB0kHTQZRB1EGVQZRB00HUQZVB1UGWQZVB1EHVQZZB1kGXQZZB1UHWQZdB10GYQZdB1kHXQZhB2EGZQZhB10HYQZlB2UGaQZlB2EHZQZpB2kGbQZpB2UHaQZtB20GcQZtB2kHbQZxB3EGdQZxB20HcQZ1B3UGeQZ1B3EHdQZ5B3kGfQZ5B3UHeQZ9B30GgQZ9B3kHfQaBB4EGhQaBB30HgQaFB4UGiQaFB4EHhQaJB4kGjQaJB4UHiQaNB40GkQaNB4kHjQaRB5EGlQaRB40HkQaVB5UGmQaVB5EHlQaZB5kGnQaZB5UHmQadB50GoQadB5kHnQahB6EGpQahB50HoQalB6UGqQalB6EHpQapB6kGrQapB6UHqQatB60GsQatB6kHrQaxB7EGtQaxB60HsQa1B7UGuQa1B7EHtQa5B7kGvQa5B7UHuQa9B70GwQa9B7kHvQbBB8EGxQbBB70HwQbFB8UGyQbFB8EHxQbJB8kGzQbJB8UHyQbNB80G0QbNB8kHzQbRB9EG1QbRB80H0QbVB9UG2QbVB9EH1QbZB9kG3QbZB9UH2QbdB90G4QbdB9kH3QbhB+EG5QbhB90H4QblB+UG6QblB+EH5QbpB+kG7QbpB+UH6QbtB+0G8QbtB+kH7QbxBBAHDALxB+0EEAXwf/EG9QXwfOx/8Qb1B/UG+Qb1B/EH9Qb5B/kG/Qb5B/UH+Qb9B/0HAQb9B/kH/QcBBAELBQcBB/0EAQsFBAULCQcFBAEIBQsJBAkLDQcJBAUICQsNBA0LEQcNBAkIDQsRBBELFQcRBA0IEQsVBBULGQcVBBEIFQsZBBkLHQcZBBUIGQsdBB0LIQcdBBkIHQshBCELJQchBB0IIQslBCULKQclBCEIJQspBCkLLQcpBCUIKQstBC0LMQctBCkILQsxBDELNQcxBC0IMQs1BDULOQc1BDEINQs5BDkLPQc5BDUIOQs9BD0LQQc9BDkIPQtBBEELRQdBBD0IQQtFBEULSQdFBEEIRQtJBEkLTQdJBEUISQtNBE0LUQdNBEkITQtRBFELVQdRBE0IUQtVBFULWQdVBFEIVQtZBFkLXQdZBFUIWQtdBF0LYQddBFkIXQthBGELZQdhBF0IYQtlBGULaQdlBGEIZQtpBGkLbQdpBGUIaQttBG0LcQdtBGkIbQtxBHELdQdxBG0IcQt1BHULeQd1BHEIdQt5BHkLfQd5BHUIeQt9BH0LgQd9BHkIfQuBBIELhQeBBH0IgQuFBIULiQeFBIEIhQuJBIkLjQeJBIUIiQuNBI0LkQeNBIkIjQuRBJELlQeRBI0IkQuVBJULmQeVBJEIlQuZBJkLnQeZBJUImQudBJ0LoQedBJkInQuhBKELpQehBJ0IoQulBKULqQelBKEIpQupBKkLrQepBKUIqQutBK0LsQetBKkIrQuxBLELtQexBK0IsQu1BLULuQe1BLEItQu5BLkLvQe5BLUIuQu9BL0LwQe9BLkIvQvBBMELxQfBBL0IwQvFBMULyQfFBMEIxQvJBMkLzQfJBMUIyQvNBM0L0QfNBMkIzQvRBNEL1QfRBM0I0QvVBNUL2QfVBNEI1QvZBNkL3QfZBNUI2QvdBN0L4QfdBNkI3QvhBOEL5QfhBN0I4QvlBOUL6QflBOEI5QvpBOkL7QfpBOUI6QvtBRQEEAftBOkJFATsfO0L8QTsf+h47QvxBPEL9QfxBO0I8Qv1BPUL+Qf1BPEI9Qv5BPkL/Qf5BPUI+Qv9BP0IAQv9BPkI/QgBCQEIBQgBCP0JAQgFCQUICQgFCQEJBQgJCQkIDQgJCQUJCQgNCQ0IEQgNCQkJDQgRCREIFQgRCQ0JEQgVCRUIGQgVCREJFQgZCRkIHQgZCRUJGQgdCR0IIQgdCRkJHQghCSEIJQghCR0JIQglCSUIKQglCSEJJQgpCSkILQgpCSUJKQgtCS0IMQgtCSkJLQgxCTEINQgxCS0JMQg1CTUIOQg1CTEJNQg5CTkIPQg5CTUJOQg9CT0IQQg9CTkJPQhBCUEIRQhBCT0JQQhFCUUISQhFCUEJRQhJCUkITQhJCUUJSQhNCU0IUQhNCUkJTQhRCVEIVQhRCU0JUQhVCVUIWQhVCVEJVQhZCVkIXQhZCVUJWQhdCV0IYQhdCVkJXQhhCWEIZQhhCV0JYQhlCWUIaQhlCWEJZQhpCWkIbQhpCWUJaQhtCW0IcQhtCWkJbQhxCXEIdQhxCW0JcQh1CXUIeQh1CXEJdQh5CXkIfQh5CXUJeQh9CX0IgQh9CXkJfQiBCYEIhQiBCX0JgQiFCYUIiQiFCYEJhQiJCYkIjQiJCYUJiQiNCY0IkQiNCYkJjQiRCZEIlQiRCY0JkQiVCZUImQiVCZEJlQiZCZkInQiZCZUJmQidCZ0IoQidCZkJnQihCaEIpQihCZ0JoQilCaUIqQilCaEJpQipCakIrQipCaUJqQitCa0IsQitCakJrQixCbEItQixCa0JsQi1CbUIuQi1CbEJtQi5CbkIvQi5CbUJuQi9Cb0IwQi9CbkJvQjBCcEIxQjBCb0JwQjFCcUIyQjFCcEJxQjJCckIzQjJCcUJyQjNCc0I0QjNCckJzQjRCdEI1QjRCc0J0QjVCdUI2QjVCdEJ1QjZCdkI3QjZCdUJ2QjdCd0I4QjdCdkJ3QjhCeEI5QjhCd0J4QjlCeUI6QjlCeEJ5QjpChgFFATpCeUKGAfoeekI7QvoeuR56QjtCe0I8QjtCekJ7QjxCfEI9QjxCe0J8Qj1CfUI+Qj1CfEJ9Qj5CfkI/Qj5CfUJ+Qj9Cf0JAQj9CfkJ/QkBCgEJBQkBCf0KAQkFCgUJCQkFCgEKBQkJCgkJDQkJCgUKCQkNCg0JEQkNCgkKDQkRChEJFQkRCg0KEQkVChUJGQkVChEKFQkZChkJHQkZChUKGQkdCh0JIQkdChkKHQkhCiEJJQkhCh0KIQklCiUJKQklCiEKJQkpCikJLQkpCiUKKQktCi0JMQktCikKLQkxCjEJNQkxCi0KMQk1CjUJOQk1CjEKNQk5CjkJPQk5CjUKOQk9Cj0JQQk9CjkKPQlBCkEJRQlBCj0KQQlFCkUJSQlFCkEKRQlJCkkJTQlJCkUKSQlNCk0JUQlNCkkKTQlRClEJVQlRCk0KUQlVClUJWQlVClEKVQlZClkJXQlZClUKWQldCl0JYQldClkKXQlhCmEJZQlhCl0KYQllCmUJaQllCmEKZQlpCmkJbQlpCmUKaQltCm0JcQltCmkKbQlxCnEJdQlxCm0KcQl1CnUJeQl1CnEKdQl5CnkJfQl5CnUKeQl9Cn0JgQl9CnkKfQmBCoEJhQmBCn0KgQmFCoUJiQmFCoEKhQmJCokJjQmJCoUKiQmNCo0JkQmNCokKjQmRCpEJlQmRCo0KkQmVCpUJmQmVCpEKlQmZCpkJnQmZCpUKmQmdCp0JoQmdCpkKnQmhCqEJpQmhCp0KoQmlCqUJqQmlCqEKpQmpCqkJrQmpCqUKqQmtCq0JsQmtCqkKrQmxCrEJtQmxCq0KsQm1CrUJuQm1CrEKtQm5CrkJvQm5CrUKuQm9Cr0JwQm9CrkKvQnBCsEJxQnBCr0KwQnFCsUJyQnFCsEKxQnJCskJzQnJCsUKyQnNCs0J0QnNCskKzQnRCtEJ1QnRCs0K0QnVCtUJ2QnVCtEK1QnZCtkJ3QnZCtUK2QndCt0J4QndCtkK3QnhCuEJ5QnhCt0K4QnlCxwGGAXlCuELHAbkeuUJ6QrkeeB65QnpCukJ7QnpCuUK6QntCu0J8QntCukK7QnxCvEJ9QnxCu0K8Qn1CvUJ+Qn1CvEK9Qn5CvkJ/Qn5CvUK+Qn9Cv0KAQn9CvkK/QoBCwEKBQoBCv0LAQoFCwUKCQoFCwELBQoJCwkKDQoJCwULCQoNCw0KEQoNCwkLDQoRCxEKFQoRCw0LEQoVCxUKGQoVCxELFQoZCxkKHQoZCxULGQodCx0KIQodCxkLHQohCyEKJQohCx0LIQolCyUKKQolCyELJQopCykKLQopCyULKQotCy0KMQotCykLLQoxCzEKNQoxCy0LMQo1CzUKOQo1CzELNQo5CzkKPQo5CzULOQo9Cz0KQQo9CzkLPQpBC0EKRQpBCz0LQQpFC0UKSQpFC0ELRQpJC0kKTQpJC0ULSQpNC00KUQpNC0kLTQpRC1EKVQpRC00LUQpVC1UKWQpVC1ELVQpZC1kKXQpZC1ULWQpdC10KYQpdC1kLXQphC2EKZQphC10LYQplC2UKaQplC2ELZQppC2kKbQppC2ULaQptC20KcQptC2kLbQpxC3EKdQpxC20LcQp1C3UKeQp1C3ELdQp5C3kKfQp5C3ULeQp9C30KgQp9C3kLfQqBC4EKhQqBC30LgQqFC4UKiQqFC4ELhQqJC4kKjQqJC4ULiQqNC40KkQqNC4kLjQqRC5EKlQqRC40LkQqVC5UKmQqVC5ELlQqZC5kKnQqZC5ULmQqdC50KoQqdC5kLnQqhC6EKpQqhC50LoQqlC6UKqQqlC6ELpQqpC6kKrQqpC6ULqQqtC60KsQqtC6kLrQqxC7EKtQqxC60LsQq1C7UKuQq1C7ELtQq5C7kKvQq5C7ULuQq9C70KwQq9C7kLvQrBC8EKxQrBC70LwQrFC8UKyQrFC8ELxQrJC8kKzQrJC8ULyQrNC80K0QrNC8kLzQrRC9EK1QrRC80L0QrVC9UK2QrVC9EL1QrZC9kK3QrZC9UL2QrdC90K4QrdC9kL3QrhCCALHAbhC90IIAnge+EK5QngeNx74QrlC+UK6QrlC+EL5QrpC+kK7QrpC+UL6QrtC+0K8QrtC+kL7QrxC/EK9QrxC+0L8Qr1C/UK+Qr1C/EL9Qr5C/kK/Qr5C/UL+Qr9C/0LAQr9C/kL/QsBCAEPBQsBC/0IAQ8FCAUPCQsFCAEMBQ8JCAkPDQsJCAUMCQ8NCA0PEQsNCAkMDQ8RCBEPFQsRCA0MEQ8VCBUPGQsVCBEMFQ8ZCBkPHQsZCBUMGQ8dCB0PIQsdCBkMHQ8hCCEPJQshCB0MIQ8lCCUPKQslCCEMJQ8pCCkPLQspCCUMKQ8tCC0PMQstCCkMLQ8xCDEPNQsxCC0MMQ81CDUPOQs1CDEMNQ85CDkPPQs5CDUMOQ89CD0PQQs9CDkMPQ9BCEEPRQtBCD0MQQ9FCEUPSQtFCEEMRQ9JCEkPTQtJCEUMSQ9NCE0PUQtNCEkMTQ9RCFEPVQtRCE0MUQ9VCFUPWQtVCFEMVQ9ZCFkPXQtZCFUMWQ9dCF0PYQtdCFkMXQ9hCGEPZQthCF0MYQ9lCGUPaQtlCGEMZQ9pCGkPbQtpCGUMaQ9tCG0PcQttCGkMbQ9xCHEPdQtxCG0McQ91CHUPeQt1CHEMdQ95CHkPfQt5CHUMeQ99CH0PgQt9CHkMfQ+BCIEPhQuBCH0MgQ+FCIUPiQuFCIEMhQ+JCIkPjQuJCIUMiQ+NCI0PkQuNCIkMjQ+RCJEPlQuRCI0MkQ+VCJUPmQuVCJEMlQ+ZCJkPnQuZCJUMmQ+dCJ0PoQudCJkMnQ+hCKEPpQuhCJ0MoQ+lCKUPqQulCKEMpQ+pCKkPrQupCKUMqQ+tCK0PsQutCKkMrQ+xCLEPtQuxCK0MsQ+1CLUPuQu1CLEMtQ+5CLkPvQu5CLUMuQ+9CL0PwQu9CLkMvQ/BCMEPxQvBCL0MwQ/FCMUPyQvFCMEMxQ/JCMkPzQvJCMUMyQ/NCM0P0QvNCMkMzQ/RCNEP1QvRCM0M0Q/VCNUP2QvVCNEM1Q/ZCNkP3QvZCNUM2Q/dCSQIIAvdCNkNJAjceN0P4Qjce9h03Q/hCOEP5QvhCN0M4Q/lCOUP6QvlCOEM5Q/pCOkP7QvpCOUM6Q/tCO0P8QvtCOkM7Q/xCPEP9QvxCO0M8Q/1CPUP+Qv1CPEM9Q/5CPkP/Qv5CPUM+Q/9CP0MAQ/9CPkM/QwBDQEMBQwBDP0NAQwFDQUMCQwFDQENBQwJDQkMDQwJDQUNCQwNDQ0MEQwNDQkNDQwRDREMFQwRDQ0NEQwVDRUMGQwVDRENFQwZDRkMHQwZDRUNGQwdDR0MIQwdDRkNHQwhDSEMJQwhDR0NIQwlDSUMKQwlDSENJQwpDSkMLQwpDSUNKQwtDS0MMQwtDSkNLQwxDTEMNQwxDS0NMQw1DTUMOQw1DTENNQw5DTkMPQw5DTUNOQw9DT0MQQw9DTkNPQxBDUEMRQxBDT0NQQxFDUUMSQxFDUENRQxJDUkMTQxJDUUNSQxNDU0MUQxNDUkNTQxRDVEMVQxRDU0NUQxVDVUMWQxVDVENVQxZDVkMXQxZDVUNWQxdDV0MYQxdDVkNXQxhDWEMZQxhDV0NYQxlDWUMaQxlDWENZQxpDWkMbQxpDWUNaQxtDW0McQxtDWkNbQxxDXEMdQxxDW0NcQx1DXUMeQx1DXENdQx5DXkMfQx5DXUNeQx9DX0MgQx9DXkNfQyBDYEMhQyBDX0NgQyFDYUMiQyFDYENhQyJDYkMjQyJDYUNiQyNDY0MkQyNDYkNjQyRDZEMlQyRDY0NkQyVDZUMmQyVDZENlQyZDZkMnQyZDZUNmQydDZ0MoQydDZkNnQyhDaEMpQyhDZ0NoQylDaUMqQylDaENpQypDakMrQypDaUNqQytDa0MsQytDakNrQyxDbEMtQyxDa0NsQy1DbUMuQy1DbENtQy5DbkMvQy5DbUNuQy9Db0MwQy9DbkNvQzBDcEMxQzBDb0NwQzFDcUMyQzFDcENxQzJDckMzQzJDcUNyQzNDc0M0QzNDckNzQzRDdEM1QzRDc0N0QzVDdUM2QzVDdEN1QzZDigJJAjZDdUOKAvYddkM3Q/YdtR12QzdDd0M4QzdDdkN3QzhDeEM5QzhDd0N4QzlDeUM6QzlDeEN5QzpDekM7QzpDeUN6QztDe0M8QztDekN7QzxDfEM9QzxDe0N8Qz1DfUM+Qz1DfEN9Qz5DfkM/Qz5DfUN+Qz9Df0NAQz9DfkN/Q0BDgENBQ0BDf0OAQ0FDgUNCQ0FDgEOBQ0JDgkNDQ0JDgUOCQ0NDg0NEQ0NDgkODQ0RDhENFQ0RDg0OEQ0VDhUNGQ0VDhEOFQ0ZDhkNHQ0ZDhUOGQ0dDh0NIQ0dDhkOHQ0hDiENJQ0hDh0OIQ0lDiUNKQ0lDiEOJQ0pDikNLQ0pDiUOKQ0tDi0NMQ0tDikOLQ0xDjENNQ0xDi0OMQ01DjUNOQ01DjEONQ05DjkNPQ05DjUOOQ09Dj0NQQ09DjkOPQ1BDkENRQ1BDj0OQQ1FDkUNSQ1FDkEORQ1JDkkNTQ1JDkUOSQ1NDk0NUQ1NDkkOTQ1RDlENVQ1RDk0OUQ1VDlUNWQ1VDlEOVQ1ZDlkNXQ1ZDlUOWQ1dDl0NYQ1dDlkOXQ1hDmENZQ1hDl0OYQ1lDmUNaQ1lDmEOZQ1pDmkNbQ1pDmUOaQ1tDm0NcQ1tDmkObQ1xDnENdQ1xDm0OcQ11DnUNeQ11DnEOdQ15DnkNfQ15DnUOeQ19Dn0NgQ19DnkOfQ2BDoENhQ2BDn0OgQ2FDoUNiQ2FDoEOhQ2JDokNjQ2JDoUOiQ2NDo0NkQ2NDokOjQ2RDpENlQ2RDo0OkQ2VDpUNmQ2VDpEOlQ2ZDpkNnQ2ZDpUOmQ2dDp0NoQ2dDpkOnQ2hDqENpQ2hDp0OoQ2lDqUNqQ2lDqEOpQ2pDqkNrQ2pDqUOqQ2tDq0NsQ2tDqkOrQ2xDrENtQ2xDq0OsQ21DrUNuQ21DrEOtQ25DrkNvQ25DrUOuQ29Dr0NwQ29DrkOvQ3BDsENxQ3BDr0OwQ3FDsUNyQ3FDsEOxQ3JDskNzQ3JDsUOyQ3NDs0N0Q3NDskOzQ3RDtEN1Q3RDs0O0Q3VDywKKAnVDtEPLArUdtUN2Q7UddB21Q3ZDtkN3Q3ZDtUO2Q3dDt0N4Q3dDtkO3Q3hDuEN5Q3hDt0O4Q3lDuUN6Q3lDuEO5Q3pDukN7Q3pDuUO6Q3tDu0N8Q3tDukO7Q3xDvEN9Q3xDu0O8Q31DvUN+Q31DvEO9Q35DvkN/Q35DvUO+Q39Dv0OAQ39DvkO/Q4BDwEOBQ4BDv0PAQ4FDwUOCQ4FDwEPBQ4JDwkODQ4JDwUPCQ4NDw0OEQ4NDwkPDQ4RDxEOFQ4RDw0PEQ4VDxUOGQ4VDxEPFQ4ZDxkOHQ4ZDxUPGQ4dDx0OIQ4dDxkPHQ4hDyEOJQ4hDx0PIQ4lDyUOKQ4lDyEPJQ4pDykOLQ4pDyUPKQ4tDy0OMQ4tDykPLQ4xDzEONQ4xDy0PMQ41DzUOOQ41DzEPNQ45DzkOPQ45DzUPOQ49Dz0OQQ49DzkPPQ5BD0EORQ5BDz0PQQ5FD0UOSQ5FD0EPRQ5JD0kOTQ5JD0UPSQ5ND00OUQ5ND0kPTQ5RD1EOVQ5RD00PUQ5VD1UOWQ5VD1EPVQ5ZD1kOXQ5ZD1UPWQ5dD10OYQ5dD1kPXQ5hD2EOZQ5hD10PYQ5lD2UOaQ5lD2EPZQ5pD2kObQ5pD2UPaQ5tD20OcQ5tD2kPbQ5xD3EOdQ5xD20PcQ51D3UOeQ51D3EPdQ55D3kOfQ55D3UPeQ59D30OgQ59D3kPfQ6BD4EOhQ6BD30PgQ6FD4UOiQ6FD4EPhQ6JD4kOjQ6JD4UPiQ6ND40OkQ6ND4kPjQ6RD5EOlQ6RD40PkQ6VD5UOmQ6VD5EPlQ6ZD5kOnQ6ZD5UPmQ6dD50OoQ6dD5kPnQ6hD6EOpQ6hD50PoQ6lD6UOqQ6lD6EPpQ6pD6kOrQ6pD6UPqQ6tD60OsQ6tD6kPrQ6xD7EOtQ6xD60PsQ61D7UOuQ61D7EPtQ65D7kOvQ65D7UPuQ69D70OwQ69D7kPvQ7BD8EOxQ7BD70PwQ7FD8UOyQ7FD8EPxQ7JD8kOzQ7JD8UPyQ7ND80O0Q7ND8kPzQ7RDDAPLArRD80MMA3Qd9EO1Q3QdMx30Q7VD9UO2Q7VD9EP1Q7ZD9kO3Q7ZD9UP2Q7dD90O4Q7dD9kP3Q7hD+EO5Q7hD90P4Q7lD+UO6Q7lD+EP5Q7pD+kO7Q7pD+UP6Q7tD+0O8Q7tD+kP7Q7xD/EO9Q7xD+0P8Q71D/UO+Q71D/EP9Q75D/kO/Q75D/UP+Q79D/0PAQ79D/kP/Q8BDAETBQ8BD/0MARMFDAUTCQ8FDAEQBRMJDAkTDQ8JDAUQCRMNDA0TEQ8NDAkQDRMRDBETFQ8RDA0QERMVDBUTGQ8VDBEQFRMZDBkTHQ8ZDBUQGRMdDB0TIQ8dDBkQHRMhDCETJQ8hDB0QIRMlDCUTKQ8lDCEQJRMpDCkTLQ8pD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nUSeRF9En0RgRF9EnkSfRGBEoERhRGBEn0SgRGFEoURiRGFEoEShRGJEokRjRGJEoUSiRGNEo0RkRGNEokSjRGREpERlRGREo0SkRGVEpURmRGVEpESlRGZEpkRnRGZEpUSmRGdEp0RoRGdEpkSnRGhEqERpRGhEp0SoRGlEqURqRGlEqESpRGpEqkRrRGpEqUSqRGtEq0RsRGtEqkSrRGxErERtRGxEq0SsRG1ErURuRG1ErEStRG5ErkRvRG5ErUSuRG9Er0RwRG9ErkSvRHBEsERxRHBEr0SwRHFEzwOOA3FEsETPA7EcsURyRLEccByxRHJEskRzRHJEsUSyRHNEs0R0RHNEskSzRHREtER1RHREs0S0RHVEtUR2RHVEtES1RHZEtkR3RHZEtUS2RHdEt0R4RHdEtkS3RHhEuER5RHhEt0S4RHlEuUR6RHlEuES5RHpEukR7RHpEuUS6RHtEu0R8RHtEukS7RHxEvER9RHxEu0S8RH1EvUR+RH1EvES9RH5EvkR/RH5EvUS+RH9Ev0SARH9EvkS/RIBEwESBRIBEv0TARIFEwUSCRIFEwETBRIJEwkSDRIJEwUTCRINEw0SERINEwkTDRIRExESFRIREw0TERIVExUSGRIVExETFRIZExkSHRIZExUTGRIdEx0SIRIdExkTHRIhEyESJRIhEx0TIRIlEyUSKRIlEyETJRIpEykSLRIpEyUTKRItEy0SMRItEykTLRIxEzESNRIxEy0TMRI1EzUSORI1EzETNRI5EzkSPRI5EzUTORI9Ez0SQRI9EzkTPRJBE0ESRRJBEz0TQRJFE0USSRJFE0ETRRJJE0kSTRJJE0UTSRJNE00SURJNE0kTTRJRE1ESVRJRE00TURJVE1USWRJVE1ETVRJZE1kSXRJZE1UTWRJdE10SYRJdE1kTXRJhE2ESZRJhE10TYRJlE2USaRJlE2ETZRJpE2kSbRJpE2UTaRJtE20ScRJtE2kTbRJxE3ESdRJxE20TcRJ1E3USeRJ1E3ETdRJ5E3kSfRJ5E3UTeRJ9E30SgRJ9E3kTfRKBE4EShRKBE30TgRKFE4USiRKFE4EThRKJE4kSjRKJE4UTiRKNE40SkRKNE4kTjRKRE5ESlRKRE40TkRKVE5USmRKVE5ETlRKZE5kSnRKZE5UTmRKdE50SoRKdE5kTnRKhE6ESpRKhE50ToRKlE6USqRKlE6ETpRKpE6kSrRKpE6UTqRKtE60SsRKtE6kTrRKxE7EStRKxE60TsRK1E7USuRK1E7ETtRK5E7kSvRK5E7UTuRK9E70SwRK9E7kTvRLBEEATPA7BE70QQBHAc8ESxRHAcLxzwRLFE8USyRLFE8ETxRLJE8kSzRLJE8UTyRLNE80S0RLNE8kTzRLRE9ES1RLRE80T0RLVE9US2RLVE9ET1RLZE9kS3RLZE9UT2RLdE90S4RLdE9kT3RLhE+ES5RLhE90T4RLlE+US6RLlE+ET5RLpE+kS7RLpE+UT6RLtE+0S8RLtE+kT7RLxE/ES9RLxE+0T8RL1E/US+RL1E/ET9RL5E/kS/RL5E/UT+RL9E/0TARL9E/kT/RMBEAEXBRMBE/0QARcFEAUXCRMFEAEUBRcJEAkXDRMJEAUUCRcNEA0XERMNEAkUDRcREBEXFRMREA0UERcVEBUXGRMVEBEUFRcZEBkXHRMZEBUUGRcdEB0XIRMdEBkUHRchECEXJRMhEB0UIRclECUXKRMlECEUJRcpECkXLRMpECUUKRctEC0XMRMtECkULRcxEDEXNRMxEC0UMRc1EDUXORM1EDEUNRc5EDkXPRM5EDUUORc9ED0XQRM9EDkUPRdBEEEXRRNBED0UQRdFEEUXSRNFEEEURRdJEEkXTRNJEEUUSRdNEE0XURNNEEkUTRdREFEXVRNREE0UURdVEFUXWRNVEFEUVRdZEFkXXRNZEFUUWRddEF0XYRNdEFkUXRdhEGEXZRNhEF0UYRdlEGUXaRNlEGEUZRdpEGkXbRNpEGUUaRdtEG0XcRNtEGkUbRdxEHEXdRNxEG0UcRd1EHUXeRN1EHEUdRd5EHkXfRN5EHUUeRd9EH0XgRN9EHkUfReBEIEXhROBEH0UgReFEIUXiROFEIEUhReJEIkXjROJEIUUiReNEI0XkRONEIkUjReREJEXlROREI0UkReVEJUXmROVEJEUlReZEJkXnROZEJUUmRedEJ0XoROdEJkUnRehEKEXpROhEJ0UoRelEKUXqROlEKEUpRepEKkXrROpEKUUqRetEK0XsROtEKkUrRexELEXtROxEK0UsRe1ELUXuRO1ELEUtRe5ELkXvRO5ELUUuRe9EUQQQBO9ELkVRBC8cL0XwRC8c7hsvRfBEMEXxRPBEL0UwRfFEMUXyRPFEMEUxRfJEMkXzRPJEMUUyRfNEM0X0RPNEMkUzRfRENEX1RPREM0U0RfVENUX2RPVENEU1RfZENkX3RPZENUU2RfdEN0X4RPdENkU3RfhEOEX5RPhEN0U4RflEOUX6RPlEOEU5RfpEOkX7RPpEOUU6RftEO0X8RPtEOkU7RfxEPEX9RPxEO0U8Rf1EPUX+RP1EPEU9Rf5EPkX/RP5EPUU+Rf9EP0UARf9EPkU/RQBFQEUBRQBFP0VARQFFQUUCRQFFQEVBRQJFQkUDRQJFQUVCRQNFQ0UERQNFQkVDRQRFREUFRQRFQ0VERQVFRUUGRQVFREVFRQZFRkUHRQZFRUVGRQdFR0UIRQdFRkVHRQhFSEUJRQhFR0VIRQlFSUUKRQlFSEVJRQpFSkULRQpFSUVKRQtFS0UMRQtFSkVLRQxFTEUNRQxFS0VMRQ1FTUUORQ1FTEVNRQ5FTkUPRQ5FTUVORQ9FT0UQRQ9FTkVPRRBFUEURRRBFT0VQRRFFUUUSRRFFUEVRRRJFUkUTRRJFUUVSRRNFU0UURRNFUkVTRRRFVEUVRRRFU0VURRVFVUUWRRVFVEVVRRZFVkUXRRZFVUVWRRdFV0UYRRdFVkVXRRhFWEUZRRhFV0VYRRlFWUUaRRlFWEVZRRpFWkUbRRpFWUVaRRtFW0UcRRtFWkVbRRxFXEUdRRxFW0VcRR1FXUUeRR1FXEVdRR5FXkUfRR5FXUVeRR9FX0UgRR9FXkVfRSBFYEUhRSBFX0VgRSFFYUUiRSFFYEVhRSJFYkUjRSJFYUViRSNFY0UkRSNFYkVjRSRFZEUlRSRFY0VkRSVFZUUmRSVFZEVlRSZFZkUnRSZFZUVmRSdFZ0UoRSdFZkVnRShFaEUpRShFZ0VoRSlFaUUqRSlFaEVpRSpFakUrRSpFaUVqRStFa0UsRStFakVrRSxFbEUtRSxFa0VsRS1FbUUuRS1FbEVtRS5FkgRRBC5FbUWSBO4bbkUvRe4brRtuRS9Fb0UwRS9FbkVvRTBFcEUxRTBFb0VwRTFFcUUyRTFFcEVxRTJFckUzRTJFcUVyRTNFc0U0RTNFckVzRTRFdEU1RTRFc0V0RTVFdUU2RTVFdEV1RTZFdkU3RTZFdUV2RTdFd0U4RTdFdkV3RThFeEU5RThFd0V4RTlFeUU6RTlFeEV5RTpFekU7RTpFeUV6RTtFe0U8RTtFekV7RTxFfEU9RTxFe0V8RT1FfUU+RT1FfEV9RT5FfkU/RT5FfUV+RT9Ff0VART9FfkV/RUBFgEVBRUBFf0WARUFFgUVCRUFFgEWBRUJFgkVDRUJFgUWCRUNFg0VERUNFgkWDRURFhEVFRURFg0WERUVFhUVGRUVFhEWFRUZFhkVHRUZFhUWGRUdFh0VIRUdFhkWHRUhFiEVJRUhFh0WIRUlFiUVKRUlFiEWJRUpFikVLRUpFiUWKRUtFi0VMRUtFikWLRUxFjEVNRUxFi0WMRU1FjUVORU1FjEWNRU5FjkVPRU5FjUWORU9Fj0VQRU9FjkWPRVBFkEVRRVBFj0WQRVFFkUVSRVFFkEWRRVJFkkVTRVJFkUWSRVNFk0VURVNFkkWTRVRFlEVVRVRFk0WURVVFlUVWRVVFlEWVRVZFlkVXRVZFlUWWRVdFl0VYRVdFlkWXRVhFmEVZRVhFl0WYRVlFmUVaRVlFmEWZRVpFmkVbRVpFmUWaRVtFm0VcRVtFmkWbRVxFnEVdRVxFm0WcRV1FnUVeRV1FnEWdRV5FnkVfRV5FnUWeRV9Fn0VgRV9FnkWfRWBFoEVhRWBFn0WgRWFFoUViRWFFoEWhRWJFokVjRWJFoUWiRWNFo0VkRWNFokWjRWRFpEVlRWRFo0WkRWVFpUVmRWVFpEWlRWZFpkVnRWZFpUWmRWdFp0VoRWdFpkWnRWhFqEVpRWhFp0WoRWlFqUVqRWlFqEWpRWpFqkVrRWpFqUWqRWtFq0VsRWtFqkWrRWxFrEVtRWxFq0WsRW1F0wSSBG1FrEXTBK0brUVuRa0bbButRW5FrkVvRW5FrUWuRW9Fr0VwRW9FrkWvRXBFsEVxRXBFr0WwRXFFsUVyRXFFsEWxRXJFskVzRXJFsUWyRXNFs0V0RXNFskWzRXRFtEV1RXRFs0W0RXVFtUV2RXVFtEW1RXZFtkV3RXZFtUW2RXdFt0V4RXdFtkW3RXhFuEV5RXhFt0W4RXlFuUV6RXlFuEW5RXpFukV7RXpFuUW6RXtFu0V8RXtFukW7RXxFvEV9RXxFu0W8RX1FvUV+RX1FvEW9RX5FvkV/RX5FvUW+RX9Fv0WARX9FvkW/RYBFwEWBRYBFv0XARYFFwUWCRYFFwEXBRYJFwkWDRYJFwUXCRYNFw0WERYNFwkXDRYRFxEWFRYRFw0XERYVFxUWGRYVFxEXFRYZFxkWHRYZFxUXGRYdFx0WIRYdFxkXHRYhFyEWJRYhFx0XIRYlFyUWKRYlFyEXJRYpFykWLRYpFyUXKRYtFy0WMRYtFykXLRYxFzEWNRYxFy0XMRY1FzUWORY1FzEXNRY5FzkWPRY5FzUXORY9Fz0WQRY9FzkXPRZBF0EWRRZBFz0XQRZFF0UWSRZFF0EXRRZJF0kWTRZJF0UXSRZNF00WURZNF0kXTRZRF1EWVRZRF00XURZVF1UWWRZVF1EXVRZZF1kWXRZZF1UXWRZdF10WYRZdF1kXXRZhF2EWZRZhF10XYRZlF2UWaRZlF2EXZRZpF2kWbRZpF2UXaRZtF20WcRZtF2kXbRZxF3EWdRZxF20XcRZ1F3UWeRZ1F3EXdRZ5F3kWfRZ5F3UXeRZ9F30WgRZ9F3kXfRaBF4EWhRaBF30XgRaFF4UWiRaFF4EXhRaJF4kWjRaJF4UXiRaNF40WkRaNF4kXjRaRF5EWlRaRF40XkRaVF5UWmRaVF5EXlRaZF5kWnRaZF5UXmRadF50WoRadF5kXnRahF6EWpRahF50XoRalF6UWqRalF6EXpRapF6kWrRapF6UXqRatF60WsRatF6kXrRaxFFAXTBKxF60UUBWwb7EWtRWwbKxvsRa1F7UWuRa1F7EXtRa5F7kWvRa5F7UXuRa9F70WwRa9F7kXvRbBF8EWxRbBF70XwRbFF8UWyRbFF8EXxRbJF8kWzRbJF8UXyRbNF80W0RbNF8kXzRbRF9EW1RbRF80X0RbVF9UW2RbVF9EX1RbZF9kW3RbZF9UX2RbdF90W4RbdF9kX3RbhF+EW5RbhF90X4RblF+UW6RblF+EX5RbpF+kW7RbpF+UX6RbtF+0W8RbtF+kX7RbxF/EW9RbxF+0X8Rb1F/UW+Rb1F/EX9Rb5F/kW/Rb5F/UX+Rb9F/0XARb9F/kX/RcBFAEbBRcBF/0UARsFFAUbCRcFFAEYBRsJFAkbDRcJFAUYCRsNFA0bERcNFAkYDRsRFBEbFRcRFA0YERsVFBUbGRcVFBEYFRsZFBkbHRcZFBUYGRsdFB0bIRcdFBkYHRshFCEbJRchFB0YIRslFCUbKRclFCEYJRspFCkbLRcpFCUYKRstFC0bMRctFCkYLRsxFDEbNRcxFC0YMRs1FDUbORc1FDEYNRs5FDkbPRc5FDUYORs9FD0bQRc9FDkYPRtBFEEbRRdBFD0YQRtFFEUbSRdFFEEYRRtJFEkbTRdJFEUYSRtNFE0bURdNFEkYTRtRFFEbVRdRFE0YURtVFFUbWRdVFFEYVRtZFFkbXRdZFFUYWRtdFF0bYRddFFkYXRthFGEbZRdhFF0YYRtlFGUbaRdlFGEYZRtpFGkbbRdpFGUYaRttFG0bcRdtFGkYbRtxFHEbdRdxFG0YcRt1FHUbeRd1FHEYdRt5FHkbfRd5FHUYeRt9FH0bgRd9FHkYfRuBFIEbhReBFH0YgRuFFIUbiReFFIEYhRuJFIkbjReJFIUYiRuNFI0bkReNFIkYjRuRFJEblReRFI0YkRuVFJUbmReVFJEYlRuZFJkbnReZFJUYmRudFJ0boRedFJkYnRuhFKEbpRehFJ0YoRulFKUbqRelFKEYpRupFKkbrRepFKUYqRutFVQUUBetFKkZVBSsbK0bsRSsb6horRuxFLEbtRexFK0YsRu1FLUbuRe1FLEYtRu5FLkbvRe5FLUYuRu9FL0bwRe9FLkYvRvBFMEbxRfBFL0YwRvFFMUbyRfFFMEYxRvJFMkbzRfJFMUYyRvNFM0b0RfNFMkYzRvRFNEb1RfRFM0Y0RvVFNUb2RfVFNEY1RvZFNkb3RfZFNUY2RvdFN0b4RfdFNkY3RvhFOEb5RfhFN0Y4RvlFOUb6RflFOEY5RvpFOkb7RfpFOUY6RvtFO0b8RftFOkY7RvxFPEb9RfxFO0Y8Rv1FPUb+Rf1FPEY9Rv5FPkb/Rf5FPUY+Rv9FP0YARv9FPkY/RgBGQEYBRgBGP0ZARgFGQUYCRgFGQEZBRgJGQkYDRgJGQUZCRgNGQ0YERgNGQkZDRgRGREYFRgRGQ0ZERgVGRUYGRgVGREZFRgZGRkYHRgZGRUZGRgdGR0YIRgdGRkZHRghGSEYJRghGR0ZIRglGSUYKRglGSEZJRgpGSkYLRgpGSUZKRgtGS0YMRgtGSkZLRgxGTEYNRgxGS0ZMRg1GTUYORg1GTEZNRg5GTkYPRg5GTUZORg9GT0YQRg9GTkZPRhBGUEYRRhBGT0ZQRhFGUUYSRhFGUEZRRhJGUkYTRhJGUUZSRhNGU0YURhNGUkZTRhRGVEYVRhRGU0ZURhVGVUYWRhVGVEZVRhZGVkYXRhZGVUZWRhdGV0YYRhdGVkZXRhhGWEYZRhhGV0ZYRhlGWUYaRhlGWEZZRhpGWkYbRhpGWUZaRhtGW0YcRhtGWkZbRhxGXEYdRhxGW0ZcRh1GXUYeRh1GXEZdRh5GXkYfRh5GXUZeRh9GX0YgRh9GXkZfRiBGYEYhRiBGX0ZgRiFGYUYiRiFGYEZhRiJGYkYjRiJGYUZiRiNGY0YkRiNGYkZjRiRGZEYlRiRGY0ZkRiVGZUYmRiVGZEZlRiZGZkYnRiZGZUZmRidGZ0YoRidGZkZnRihGaEYpRihGZ0ZoRilGaUYqRilGaEZpRipGlgVVBSpGaUaWBeoaakYrRuoaqRpqRitGa0YsRitGakZrRixGbEYtRixGa0ZsRi1GbUYuRi1GbEZtRi5GbkYvRi5GbUZuRi9Gb0YwRi9GbkZvRjBGcEYxRjBGb0ZwRjFGcUYyRjFGcEZxRjJGckYzRjJGcUZyRjNGc0Y0RjNGckZzRjRGdEY1RjRGc0Z0RjVGdUY2RjVGdEZ1RjZGdkY3RjZGdUZ2RjdGd0Y4RjdGdkZ3RjhGeEY5RjhGd0Z4RjlGeUY6RjlGeEZ5RjpGekY7RjpGeUZ6RjtGe0Y8RjtGekZ7RjxGfEY9RjxGe0Z8Rj1GfUY+Rj1GfEZ9Rj5GfkY/Rj5GfUZ+Rj9Gf0ZARj9GfkZ/RkBGgEZBRkBGf0aARkFGgUZCRkFGgEaBRkJGgkZDRkJGgUaCRkNGg0ZERkNGgkaDRkRGhEZFRkRGg0aERkVGhUZGRkVGhEaFRkZGhkZHRkZGhUaGRkdGh0ZIRkdGhkaHRkhGiEZJRkhGh0aIRklGiUZKRklGiEaJRkpGikZLRkpGiUaKRktGi0ZMRktGikaLRkxGjEZNRkxGi0aMRk1GjUZORk1GjEaNRk5GjkZPRk5GjUaORk9Gj0ZQRk9GjkaPRlBGkEZRRlBGj0aQRlFGkUZSRlFGkEaRRlJGkkZTRlJGkUaSRlNGk0ZURlNGkkaTRlRGlEZVRlRGk0aURlVGlUZWRlVGlEaVRlZGlkZXRlZGlUaWRldGl0ZYRldGlkaXRlhGmEZZRlhGl0aYRllGmUZaRllGmEaZRlpGmkZbRlpGmUaaRltGm0ZcRltGmkabRlxGnEZdRlxGm0acRl1GnUZeRl1GnEadRl5GnkZfRl5GnUaeRl9Gn0ZgRl9GnkafRmBGoEZhRmBGn0agRmFGoUZiRmFGoEahRmJGokZjRmJGoUaiRmNGo0ZkRmNGokajRmRGpEZlRmRGo0akRmVGpUZmRmVGpEalRmZGpkZnRmZGpUamRmdGp0ZoRmdGpkanRmhGqEZpRmhGp0aoRmlG1wWWBWlGqEbXBakaqUZqRqkaaBqpRmpGqkZrRmpGqUaqRmtGq0ZsRmtGqkarRmxGrEZtRmxGq0asRm1GrUZuRm1GrEatRm5GrkZvRm5GrUauRm9Gr0ZwRm9GrkavRnBGsEZxRnBGr0awRnFGsUZyRnFGsEaxRnJGskZzRnJGsUayRnNGs0Z0RnNGskazRnRGtEZ1RnRGs0a0RnVGtUZ2RnVGtEa1RnZGtkZ3RnZGtUa2RndGt0Z4RndGtka3RnhGuEZ5RnhGt0a4RnlGuUZ6RnlGuEa5RnpGukZ7RnpGuUa6RntGu0Z8RntGuka7RnxGvEZ9RnxGu0a8Rn1GvUZ+Rn1GvEa9Rn5GvkZ/Rn5GvUa+Rn9Gv0aARn9Gvka/RoBGwEaBRoBGv0bARoFGwUaCRoFGwEbBRoJGwkaDRoJGwUbCRoNGw0aERoNGwkbDRoRGxEaFRoRGw0bERoVGxUaGRoVGxEbFRoZGxkaHRoZGxUbGRodGx0aIRodGxkbHRohGyEaJRohGx0bIRolGyUaKRolGyEbJRopGykaLRopGyUbKRotGy0aMRotGykbLRoxGzEaNRoxGy0bMRo1GzUaORo1GzEbNRo5GzkaPRo5GzUbORo9Gz0aQRo9GzkbPRpBG0EaRRpBGz0bQRpFG0UaSRpFG0EbRRpJG0kaTRpJG0UbSRpNG00aURpNG0kbTRpRG1EaVRpRG00bURpVG1UaWRpVG1EbVRpZG1kaXRpZG1UbWRpdG10aYRpdG1kbXRphG2EaZRphG10bYRplG2UaaRplG2EbZRppG2kabRppG2UbaRptG20acRptG2kbbRpxG3EadRpxG20bcRp1G3UaeRp1G3EbdRp5G3kafRp5G3UbeRp9G30agRp9G3kbfRqBG4EahRqBG30bgRqFG4UaiRqFG4EbhRqJG4kajRqJG4UbiRqNG40akRqNG4kbjRqRG5EalRqRG40bkRqVG5UamRqVG5EblRqZG5kanRqZG5UbmRqdG50aoRqdG5kbnRqhGGAbXBahG50YYBmga6EapRmgaJxroRqlG6UaqRqlG6EbpRqpG6karRqpG6UbqRqtG60asRqtG6kbrRqxG7EatRqxG60bsRq1G7UauRq1G7EbtRq5G7kavRq5G7UbuRq9G70awRq9G7kbvRrBG8EaxRrBG70bwRrFG8UayRrFG8EbxRrJG8kazRrJG8UbyRrNG80a0RrNG8kbzRrRG9Ea1RrRG80b0RrVG9Ua2RrVG9Eb1RrZG9ka3RrZG9Ub2RrdG90a4RrdG9kb3RrhG+Ea5RrhG90b4RrlG+Ua6RrlG+Eb5RrpG+ka7RrpG+Ub6RrtG+0a8RrtG+kb7RrxG/Ea9RrxG+0b8Rr1G/Ua+Rr1G/Eb9Rr5G/ka/Rr5G/Ub+Rr9G/0bARr9G/kb/RsBGAEfBRsBG/0YAR8FGAUfCRsFGAEcBR8JGAkfDRsJGAUcCR8NGA0fERsNGAkcDR8RGBEfFRsRGA0cER8VGBUfGRsVGBEcFR8ZGBkfHRsZGBUcGR8dGB0fIRsdGBkcHR8hGCEfJRshGB0cIR8lGCUfKRslGCEcJR8pGCkfLRspGCUcKR8tGC0fMRstGCkcLR8xGDEfNRsxGC0cMR81GDUfORs1GDEcNR85GDkfPRs5GDUcOR89GD0fQRs9GDkcPR9BGEEfRRtBGD0cQR9FGEUfSRtFGEEcRR9JGEkfTRtJGEUcSR9NGE0fURtNGEkcTR9RGFEfVRtRGE0cUR9VGFUfWRtVGFEcVR9ZGFkfXRtZGFUcWR9dGF0fYRtdGFkcXR9hGGEfZRthGF0cYR9lGGUfaRtlGGEcZR9pGGkfbRtpGGUcaR9tGG0fcRttGGkcbR9xGHEfdRtxGG0ccR91GHUfeRt1GHEcdR95GHkffRt5GHUceR99GH0fgRt9GHkcfR+BGIEfhRuBGH0cgR+FGIUfiRuFGIEchR+JGIkfjRuJGIUciR+NGI0fkRuNGIkcjR+RGJEflRuRGI0ckR+VGJUfmRuVGJEclR+ZGJkfnRuZGJUcmR+dGWQYYBudGJkdZBicaJ0foRica5hknR+hGKEfpRuhGJ0coR+lGKUfqRulGKEcpR+pGKkfrRupGKUcqR+tGK0fsRutGKkcrR+xGLEftRuxGK0csR+1GLUfuRu1GLEctR+5GLkfvRu5GLUcuR+9GL0fwRu9GLkcvR/BGMEfxRvBGL0cwR/FGMUfyRvFGMEcxR/JGMkfzRvJGMUcyR/NGM0f0RvNGMkczR/RGNEf1RvRGM0c0R/VGNUf2RvVGNEc1R/ZGNkf3RvZGNUc2R/dGN0f4RvdGNkc3R/hGOEf5RvhGN0c4R/lGOUf6RvlGOEc5R/pGOkf7RvpGOUc6R/tGO0f8RvtGOkc7R/xGPEf9RvxGO0c8R/1GPUf+Rv1GPEc9R/5GPkf/Rv5GPUc+R/9GP0cAR/9GPkc/RwBHQEcBRwBHP0dARwFHQUcCRwFHQEdBRwJHQkcDRwJHQUdCRwNHQ0cERwNHQkdDRwRHREcFRwRHQ0dERwVHRUcGRwVHREdFRwZHRkcHRwZHRUdGRwdHR0cIRwdHRkdHRwhHSEcJRwhHR0dIRwlHSUcKRwlHSEdJRwpHSkcLRwpHSUdKRwtHS0cMRwtHSkdLRwxHTEcNRwxHS0dMRw1HTUcORw1HTEdNRw5HTkcPRw5HTUdORw9HT0cQRw9HTkdPRxBHUEcRRxBHT0dQRxFHUUcSRxFHUEdRRxJHUkcTRxJHUUdSRxNHU0cURxNHUkdTRxRHVEcVRxRHU0dURxVHVUcWRxVHVEdVRxZHVkcXRxZHVUdWRxdHV0cYRxdHVkdXRxhHWEcZRxhHV0dYRxlHWUcaRxlHWEdZRxpHWkcbRxpHWUdaRxtHW0ccRxtHWkdbRxxHXEcdRxxHW0dcRx1HXUceRx1HXEddRx5HXkcfRx5HXUdeRx9HX0cgRx9HXkdfRyBHYEchRyBHX0dgRyFHYUciRyFHYEdhRyJHYkcjRyJHYUdiRyNHY0ckRyNHYkdjRyRHZEclRyRHY0dkRyVHZUcmRyVHZEdlRyZHmgZZBiZHZUeaBuYZZkcnR+YZpRlmRydHZ0coRydHZkdnRyhHaEcpRyhHZ0doRylHaUcqRylHaEdpRypHakcrRypHaUdqRytHa0csRytHakdrRyxHbEctRyxHa0dsRy1HbUcuRy1HbEdtRy5HbkcvRy5HbUduRy9Hb0cwRy9HbkdvRzBHcEcxRzBHb0dwRzFHcUcyRzFHcEdxRzJHckczRzJHcUdyRzNHc0c0RzNHckdzRzRHdEc1RzRHc0d0RzVHdUc2RzVHdEd1RzZHdkc3RzZHdUd2RzdHd0c4RzdHdkd3RzhHeEc5RzhHd0d4RzlHeUc6RzlHeEd5RzpHekc7RzpHeUd6RztHe0c8RztHekd7RzxHfEc9RzxHe0d8Rz1HfUc+Rz1HfEd9Rz5Hfkc/Rz5HfUd+Rz9Hf0dARz9Hfkd/R0BHgEdBR0BHf0eAR0FHgUdCR0FHgEeBR0JHgkdDR0JHgUeCR0NHg0dER0NHgkeDR0RHhEdFR0RHg0eER0VHhUdGR0VHhEeFR0ZHhkdHR0ZHhUeGR0dHh0dIR0dHhkeHR0hHiEdJR0hHh0eIR0lHiUdKR0lHiEeJR0pHikdLR0pHiUeKR0tHi0dMR0tHikeLR0xHjEdNR0xHi0eMR01HjUdOR01HjEeNR05HjkdPR05HjUeOR09Hj0dQR09HjkePR1BHkEdRR1BHj0eQR1FHkUdSR1FHkEeRR1JHkkdTR1JHkUeSR1NHk0dUR1NHkkeTR1RHlEdVR1RHk0eUR1VHlUdWR1VHlEeVR1ZHlkdXR1ZHlUeWR1dHl0dYR1dHlkeXR1hHmEdZR1hHl0eYR1lHmUdaR1lHmEeZR1pHmkdbR1pHmUeaR1tHm0dcR1tHmkebR1xHnEddR1xHm0ecR11HnUdeR11HnEedR15HnkdfR15HnUeeR19Hn0dgR19HnkefR2BHoEdhR2BHn0egR2FHoUdiR2FHoEehR2JHokdjR2JHoUeiR2NHo0dkR2NHokejR2RHpEdlR2RHo0ekR2VH2waaBmVHpEfbBqUZpUdmR6UZZBmlR2ZHpkdnR2ZHpUemR2dHp0doR2dHpkenR2hHqEdpR2hHp0eoR2lHqUdqR2lHqEepR2pHqkdrR2pHqUeqR2tHq0dsR2tHqkerR2xHrEdtR2xHq0esR21HrUduR21HrEetR25HrkdvR25HrUeuR29Hr0dwR29HrkevR3BHsEdxR3BHr0ewR3FHsUdyR3FHsEexR3JHskdzR3JHsUeyR3NHs0d0R3NHskezR3RHtEd1R3RHs0e0R3VHtUd2R3VHtEe1R3ZHtkd3R3ZHtUe2R3dHt0d4R3dHtke3R3hHuEd5R3hHt0e4R3lHuUd6R3lHuEe5R3pHukd7R3pHuUe6R3tHu0d8R3tHuke7R3xHvEd9R3xHu0e8R31HvUd+R31HvEe9R35Hvkd/R35HvUe+R39Hv0eAR39Hvke/R4BHwEeBR4BHv0fAR4FHwUeCR4FHwEfBR4JHwkeDR4JHwUfCR4NHw0eER4NHwkfDR4RHxEeFR4RHw0fER4VHxUeGR4VHxEfFR4ZHxkeHR4ZHxUfGR4dHx0eIR4dHxkfHR4hHyEeJR4hHx0fIR4lHyUeKR4lHyEfJR4pHykeLR4pHyUfKR4tHy0eMR4tHykfLR4xHzEeNR4xHy0fMR41HzUeOR41HzEfNR45HzkePR45HzUfOR49Hz0eQR49HzkfPR5BH0EeRR5BHz0fQR5FH0UeSR5FH0EfRR5JH0keTR5JH0UfSR5NH00eUR5NH0kfTR5RH1EeVR5RH00fUR5VH1UeWR5VH1EfVR5ZH1keXR5ZH1UfWR5dH10eYR5dH1kfXR5hH2EeZR5hH10fYR5lH2UeaR5lH2EfZR5pH2kebR5pH2UfaR5tH20ecR5tH2kfbR5xH3EedR5xH20fcR51H3UeeR51H3EfdR55H3kefR55H3UfeR59H30egR59H3kffR6BH4EehR6BH30fgR6FH4UeiR6FH4EfhR6JH4kejR6JH4UfiR6NH40ekR6NH4kfjR6RHHAfbBqRH40ccB2QZ5EelR2QZIxnkR6VH5UemR6VH5EflR6ZH5kenR6ZH5UfmR6dH50eoR6dH5kfnR6hH6EepR6hH50foR6lH6UeqR6lH6EfpR6pH6kerR6pH6UfqR6tH60esR6tH6kfrR6xH7EetR6xH60fsR61H7UeuR61H7EftR65H7kevR65H7UfuR69H70ewR69H7kfvR7BH8EexR7BH70fwR7FH8UeyR7FH8EfxR7JH8kezR7JH8UfyR7NH80e0R7NH8kfzR7RH9Ee1R7RH80f0R7VH9Ue2R7VH9Ef1R7ZH9ke3R7ZH9Uf2R7dH90e4R7dH9kf3R7hH+Ee5R7hH90f4R7lH+Ue6R7lH+Ef5R7pH+ke7R7pH+Uf6R7tH+0e8R7tH+kf7R7xH/Ee9R7xH+0f8R71H/Ue+R71H/Ef9R75H/ke/R75H/Uf+R79H/0fAR79H/kf/R8BHAEjBR8BH/0cASMFHAUjCR8FHAEgBSMJHAkjDR8JHAUgCSMNHA0jER8NHAkgDSMRHBEjFR8RHA0gESMVHBUjGR8VHBEgFSMZHBkjHR8ZHBUgGSMdHB0jIR8dHBkgHSMhHCEjJR8hHB0gISMlHCUjKR8lHCEgJSMpHCkjLR8pHCUgKSMtHC0jMR8tHCkgLSMxHDEjNR8xHC0gMSM1HDUjOR81HDEgNSM5HDkjPR85HDUgOSM9HD0jQR89HDkgPSNBHEEjRR9BHD0gQSNFHEUjSR9FHEEgRSNJHEkjTR9JHEUgSSNNHE0jUR9NHEkgTSNRHFEjVR9RHE0gUSNVHFUjWR9VHFEgVSNZHFkjXR9ZHFUgWSNdHF0jYR9dHFkgXSNhHGEjZR9hHF0gYSNlHGUjaR9lHGEgZSNpHGkjbR9pHGUgaSNtHG0jcR9tHGkgbSNxHHEjdR9xHG0gcSN1HHUjeR91HHEgdSN5HHkjfR95HHUgeSN9HH0jgR99HHkgfSOBHIEjhR+BHH0ggSOFHIUjiR+FHIEghSOJHIkjjR+JHIUgiSONHXQccB+NHIkhdByMZI0jkRyMZ4hgjSORHJEjlR+RHI0gkSOVHJUjmR+VHJEglSOZHJkjnR+ZHJUgmSOdHJ0joR+dHJkgnSOhHKEjpR+hHJ0goSOlHKUjqR+lHKEgpSOpHKkjrR+pHKUgqSOtHK0jsR+tHKkgrSOxHLEjtR+xHK0gsSO1HLUjuR+1HLEgtSO5HLkjvR+5HLUguSO9HL0jwR+9HLkgvSPBHMEjxR/BHL0gwSPFHMUjyR/FHMEgxSPJHMkjzR/JHMUgySPNHM0j0R/NHMkgzSPRHNEj1R/RHM0g0SPVHNUj2R/VHNEg1SPZHNkj3R/ZHNUg2SPdHN0j4R/dHNkg3SPhHOEj5R/hHN0g4SPlHOUj6R/lHOEg5SPpHOkj7R/pHOUg6SPtHO0j8R/tHOkg7SPxHPEj9R/xHO0g8SP1HPUj+R/1HPEg9SP5HPkj/R/5HPUg+SP9HP0gASP9HPkg/SABIQEgBSABIP0hASAFIQUgCSAFIQEhBSAJIQkgDSAJIQUhCSANIQ0gESANIQkhDSARIREgFSARIQ0hESAVIRUgGSAVIREhFSAZIRkgHSAZIRUhGSAdIR0gISAdIRkhHSAhISEgJSAhIR0hISAlISUgKSAlISEhJSApISkgLSApISUhKSAtIS0gMSAtISkhLSAxITEgNSAxIS0hMSA1ITUgOSA1ITEhNSA5ITkgPSA5ITUhOSA9IT0gQSA9ITkhPSBBIUEgRSBBIT0hQSBFIUUgSSBFIUEhRSBJIUkgTSBJIUUhSSBNIU0gUSBNIUkhTSBRIVEgVSBRIU0hUSBVIVUgWSBVIVEhVSBZIVkgXSBZIVUhWSBdIV0gYSBdIVkhXSBhIWEgZSBhIV0hYSBlIWUgaSBlIWEhZSBpIWkgbSBpIWUhaSBtIW0gcSBtIWkhbSBxIXEgdSBxIW0hcSB1IXUgeSB1IXEhdSB5IXkgfSB5IXUheSB9IX0ggSB9IXkhfSCBIYEghSCBIX0hgSCFIYUgiSCFIYEhhSCJIngddByJIYUieB+IYYkgjSOIYoRhiSCNIY0gkSCNIYkhjSCRIZEglSCRIY0hkSCVIZUgmSCVIZEhlSCZIZkgnSCZIZUhmSCdIZ0goSCdIZkhnSChIaEgpSChIZ0hoSClIaUgqSClIaEhpSCpIakgrSCpIaUhqSCtIa0gsSCtIakhrSCxIbEgtSCxIa0hsSC1IbUguSC1IbEhtSC5IbkgvSC5IbUhuSC9Ib0gwSC9IbkhvSDBIcEgxSDBIb0hwSDFIcUgySDFIcEhxSDJIckgzSDJIcUhySDNIc0g0SDNIckhzSDRIdEg1SDRIc0h0SDVIdUg2SDVIdEh1SDZIdkg3SDZIdUh2SDdId0g4SDdIdkh3SDhIeEg5SDhId0h4SDlIeUg6SDlIeEh5SDpIekg7SDpIeUh6SDtIe0g8SDtIekh7SDxIfEg9SDxIe0h8SD1IfUg+SD1IfEh9SD5Ifkg/SD5IfUh+SD9If0hASD9Ifkh/SEBIgEhBSEBIf0iASEFIgUhCSEFIgEiBSEJIgkhDSEJIgUiCSENIg0hESENIgkiDSERIhEhFSERIg0iESEVIhUhGSEVIhEiFSEZIhkhHSEZIhUiGSEdIh0hISEdIhkiHSEhIiEhJSEhIh0iISElIiUhKSElIiEiJSEpIikhLSEpIiUiKSEtIi0hMSEtIikiLSExIjEhNSExIi0iMSE1IjUhOSE1IjEiNSE5IjkhPSE5IjUiOSE9Ij0hQSE9IjkiPSFBIkEhRSFBIj0iQSFFIkUhSSFFIkEiRSFJIkkhTSFJIkUiSSFNIk0hUSFNIkkiTSFRIlEhVSFRIk0iUSFVIlUhWSFVIlEiVSFZIlkhXSFZIlUiWSFdIl0hYSFdIlkiXSFhImEhZSFhIl0iYSFlImUhaSFlImEiZSFpImkhbSFpImUiaSFtIm0hcSFtImkibSFxInEhdSFxIm0icSF1InUheSF1InEidSF5InkhfSF5InUieSF9In0hgSF9InkifSGBIoEhhSGBIn0igSGFI3weeB2FIoEjfB6EYoUhiSKEYYBihSGJIokhjSGJIoUiiSGNIo0hkSGNIokijSGRIpEhlSGRIo0ikSGVIpUhmSGVIpEilSGZIpkhnSGZIpUimSGdIp0hoSGdIpkinSGhIqEhpSGhIp0ioSGlIqUhqSGlIqEipSGpIqkhrSGpIqUiqSGtIq0hsSGtIqkirSGxIrEhtSGxIq0isSG1IrUhuSG1IrEitSG5IrkhvSG5IrUiuSG9Ir0hwSG9IrkivSHBIsEhxSHBIr0iwSHFIsUhySHFIsEixSHJIskhzSHJIsUiySHNIs0h0SHNIskizSHRItEh1SHRIs0i0SHVItUh2SHVItEi1SHZItkh3SHZItUi2SHdIt0h4SHdItki3SHhIuEh5SHhIt0i4SHlIuUh6SHlIuEi5SHpIukh7SHpIuUi6SHtIu0h8SHtIuki7SHxIvEh9SHxIu0i8SH1IvUh+SH1IvEi9SH5Ivkh/SH5IvUi+SH9Iv0iASH9Ivki/SIBIwEiBSIBIv0jASIFIwUiCSIFIwEjBSIJIwkiDSIJIwUjCSINIw0iESINIwkjDSIRIxEiFSIRIw0jESIVIxUiGSIVIxEjFSIZIxkiHSIZIxUjGSIdIx0iISIdIxkjHSIhIyEiJSIhIx0jISIlIyUiKSIlIyEjJSIpIykiLSIpIyUjKSItIy0iMSItIykjLSIxIzEiNSIxIy0jMSI1IzUiOSI1IzEjNSI5IzkiPSI5IzUjOSI9Iz0iQSI9IzkjPSJBI0EiRSJBIz0jQSJFI0UiSSJFI0EjRSJJI0kiTSJJI0UjSSJNI00iUSJNI0kjTSJRI1EiVSJRI00jUSJVI1UiWSJVI1EjVSJZI1kiXSJZI1UjWSJdI10iYSJdI1kjXSJhI2EiZSJhI10jYSJlI2UiaSJlI2EjZSJpI2kibSJpI2UjaSJtI20icSJtI2kjbSJxI3EidSJxI20jcSJ1I3UieSJ1I3EjdSJ5I3kifSJ5I3UjeSJ9I30igSJ9I3kjfSKBIIAjfB6BI30ggCGAY4EihSGAYHxjgSKFI4UiiSKFI4EjhSKJI4kijSKJI4UjiSKNI40ikSKNI4kjjSKRI5EilSKRI40jkSKVI5UimSKVI5EjlSKZI5kinSKZI5UjmSKdI50ioSKdI5kjnSKhI6EipSKhI50joSKlI6UiqSKlI6EjpSKpI6kirSKpI6UjqSKtI60isSKtI6kjrSKxI7EitSKxI60jsSK1I7UiuSK1I7EjtSK5I7kivSK5I7UjuSK9I70iwSK9I7kjvSLBI8EixSLBI70jwSLFI8UiySLFI8EjxSLJI8kizSLJI8UjySLNI80i0SLNI8kjzSLRI9Ei1SLRI80j0SLVI9Ui2SLVI9Ej1SLZI9ki3SLZI9Uj2SLdI90i4SLdI9kj3SLhI+Ei5SLhI90j4SLlI+Ui6SLlI+Ej5SLpI+ki7SLpI+Uj6SLtI+0i8SLtI+kj7SLxI/Ei9SLxI+0j8SL1I/Ui+SL1I/Ej9SL5I/ki/SL5I/Uj+SL9I/0jASL9I/kj/SMBIAEnBSMBI/0gAScFIAUnCSMFIAEkBScJIAknDSMJIAUkCScNIA0nESMNIAkkDScRIBEnFSMRIA0kEScVIBUnGSMVIBEkFScZIBknHSMZIBUkGScdIB0nISMdIBkkHSchICEnJSMhIB0kISclICUnKSMlICEkJScpICknLSMpICUkKSctIC0nMSMtICkkLScxIDEnNSMxIC0kMSc1IDUnOSM1IDEkNSc5IDknPSM5IDUkOSc9ID0nQSM9IDkkPSdBIEEnRSNBID0kQSdFIEUnSSNFIEEkRSdJIEknTSNJIEUkSSdNIE0nUSNNIEkkTSdRIFEnVSNRIE0kUSdVIFUnWSNVIFEkVSdZIFknXSNZIFUkWSddIF0nYSNdIFkkXSdhIGEnZSNhIF0kYSdlIGUnaSNlIGEkZSdpIGknbSNpIGUkaSdtIG0ncSNtIGkkbSdxIHEndSNxIG0kcSd1IHUneSN1IHEkdSd5IHknfSN5IHUkeSd9IYQggCN9IHklhCB8YH0ngSB8Y3hcfSeBIIEnhSOBIH0kgSeFIIUniSOFIIEkhSeJIIknjSOJIIUkiSeNII0nkSONIIkkjSeRIJEnlSORII0kkSeVIJUnmSOVIJEklSeZIJknnSOZIJUkmSedIJ0noSOdIJkknSehIKEnpSOhIJ0koSelIKUnqSOlIKEkpSepIKknrSOpIKUkqSetIK0nsSOtIKkkrSexILEntSOxIK0ksSe1ILUnuSO1ILEktSe5ILknvSO5ILUkuSe9IL0nwSO9ILkkvSfBIMEnxSPBIL0kwSfFIMUnySPFIMEkxSfJIMknzSPJIMUkySfNIM0n0SPNIMkkzSfRINEn1SPRIM0k0SfVINUn2SPVINEk1SfZINkn3SPZINUk2SfdIN0n4SPdINkk3SfhIOEn5SPhIN0k4SflIOUn6SPlIOEk5SfpIOkn7SPpIOUk6SftIO0n8SPtIOkk7SfxIPEn9SPxIO0k8Sf1IPUn+SP1IPEk9Sf5IPkn/SP5IPUk+Sf9IP0kASf9IPkk/SQBJQEkBSQBJP0lASQFJQUkCSQFJQElBSQJJQkkDSQJJQUlCSQNJQ0kESQNJQklDSQRJREkFSQRJQ0lESQVJRUkGSQVJRElFSQZJRkkHSQZJRUlGSQdJR0kISQdJRklHSQhJSEkJSQhJR0lISQlJSUkKSQlJSElJSQpJSkkLSQpJSUlKSQtJS0kMSQtJSklLSQxJTEkNSQxJS0lMSQ1JTUkOSQ1JTElNSQ5JTkkPSQ5JTUlOSQ9JT0kQSQ9JTklPSRBJUEkRSRBJT0lQSRFJUUkSSRFJUElRSRJJUkkTSRJJUUlSSRNJU0kUSRNJUklTSRRJVEkVSRRJU0lUSRVJVUkWSRVJVElVSRZJVkkXSRZJVUlWSRdJV0kYSRdJVklXSRhJWEkZSRhJV0lYSRlJWUkaSRlJWElZSRpJWkkbSRpJWUlaSRtJW0kcSRtJWklbSRxJXEkdSRxJW0lcSR1JXUkeSR1JXEldSR5JoghhCB5JXUmiCN4XXkkfSd4XnRdeSR9JX0kgSR9JXklfSSBJYEkhSSBJX0lgSSFJYUkiSSFJYElhSSJJYkkjSSJJYUliSSNJY0kkSSNJYkljSSRJZEklSSRJY0lkSSVJZUkmSSVJZEllSSZJZkknSSZJZUlmSSdJZ0koSSdJZklnSShJaEkpSShJZ0loSSlJaUkqSSlJaElpSSpJakkrSSpJaUlqSStJa0ksSStJaklrSSxJbEktSSxJa0lsSS1JbUkuSS1JbEltSS5JbkkvSS5JbUluSS9Jb0kwSS9JbklvSTBJcEkxSTBJb0lwSTFJcUkySTFJcElxSTJJckkzSTJJcUlySTNJc0k0STNJcklzSTRJdEk1STRJc0l0STVJdUk2STVJdEl1STZJdkk3STZJdUl2STdJd0k4STdJdkl3SThJeEk5SThJd0l4STlJeUk6STlJeEl5STpJekk7STpJeUl6STtJe0k8STtJekl7STxJfEk9STxJe0l8ST1JfUk+ST1JfEl9ST5Jfkk/ST5JfUl+ST9Jf0lAST9Jfkl/SUBJgElBSUBJf0mASUFJgUlCSUFJgEmBSUJJgklDSUJJgUmCSUNJg0lESUNJgkmDSURJhElFSURJg0mESUVJhUlGSUVJhEmFSUZJhklHSUZJhUmGSUdJh0lISUdJhkmHSUhJiElJSUhJh0mISUlJiUlKSUlJiEmJSUpJiklLSUpJiUmKSUtJi0lMSUtJikmLSUxJjElNSUxJi0mMSU1JjUlOSU1JjEmNSU5JjklPSU5JjUmOSU9Jj0lQSU9JjkmPSVBJkElRSVBJj0mQSVFJkUlSSVFJkEmRSVJJkklTSVJJkUmSSVNJk0lUSVNJkkmTSVRJlElVSVRJk0mUSVVJlUlWSVVJlEmVSVZJlklXSVZJlUmWSVdJl0lYSVdJlkmXSVhJmElZSVhJl0mYSVlJmUlaSVlJmEmZSVpJmklbSVpJmUmaSVtJm0lcSVtJmkmbSVxJnEldSVxJm0mcSV1J4wiiCF1JnEnjCJ0XnUleSZ0XXBedSV5JnklfSV5JnUmeSV9Jn0lgSV9JnkmfSWBJoElhSWBJn0mgSWFJoUliSWFJoEmhSWJJokljSWJJoUmiSWNJo0lkSWNJokmjSWRJpEllSWRJo0mkSWVJpUlmSWVJpEmlSWZJpklnSWZJpUmmSWdJp0loSWdJpkmnSWhJqElpSWhJp0moSWlJqUlqSWlJqEmpSWpJqklrSWpJqUmqSWtJq0lsSWtJqkmrSWxJrEltSWxJq0msSW1JrUluSW1JrEmtSW5JrklvSW5JrUmuSW9Jr0lwSW9JrkmvSXBJsElxSXBJr0mwSXFJsUlySXFJsEmxSXJJsklzSXJJsUmySXNJs0l0SXNJskmzSXRJtEl1SXRJs0m0SXVJtUl2SXVJtEm1SXZJtkl3SXZJtUm2SXdJt0l4SXdJtkm3SXhJuEl5SXhJt0m4SXlJuUl6SXlJuEm5SXpJukl7SXpJuUm6SXtJu0l8SXtJukm7SXxJvEl9SXxJu0m8SX1JvUl+SX1JvEm9SX5Jvkl/SX5JvUm+SX9Jv0mASX9Jvkm/SYBJwEmBSYBJv0nASYFJwUmCSYFJwEnBSYJJwkmDSYJJwUnCSYNJw0mESYNJwknDSYRJxEmFSYRJw0nESYVJxUmGSYVJxEnFSYZJxkmHSYZJxUnGSYdJx0mISYdJxknHSYhJyEmJSYhJx0nISYlJyUmKSYlJyEnJSYpJykmLSYpJyUnKSYtJy0mMSYtJyknLSYxJzEmNSYxJy0nMSY1JzUmOSY1JzEnNSY5JzkmPSY5JzUnOSY9Jz0mQSY9JzknPSZBJ0EmRSZBJz0nQSZFJ0UmSSZFJ0EnRSZJJ0kmTSZJJ0UnSSZNJ00mUSZNJ0knTSZRJ1EmVSZRJ00nUSZVJ1UmWSZVJ1EnVSZZJ1kmXSZZJ1UnWSZdJ10mYSZdJ1knXSZhJ2EmZSZhJ10nYSZlJ2UmaSZlJ2EnZSZpJ2kmbSZpJ2UnaSZtJ20mcSZtJ2knbSZxJJAnjCJxJ20kkCVwX3EmdSVwXGxfcSZ1J3UmeSZ1J3EndSZ5J3kmfSZ5J3UneSZ9J30mgSZ9J3knfSaBJ4EmhSaBJ30ngSaFJ4UmiSaFJ4EnhSaJJ4kmjSaJJ4UniSaNJ40mkSaNJ4knjSaRJ5EmlSaRJ40nkSaVJ5UmmSaVJ5EnlSaZJ5kmnSaZJ5UnmSadJ50moSadJ5knnSahJ6EmpSahJ50noSalJ6UmqSalJ6EnpSapJ6kmrSapJ6UnqSatJ60msSatJ6knrSaxJ7EmtSaxJ60nsSa1J7UmuSa1J7EntSa5J7kmvSa5J7UnuSa9J70mwSa9J7knvSbBJ8EmxSbBJ70nwSbFJ8UmySbFJ8EnxSbJJ8kmzSbJJ8UnySbNJ80m0SbNJ8knzSbRJ9Em1SbRJ80n0SbVJ9Um2SbVJ9En1SbZJ9km3SbZJ9Un2SbdJ90m4SbdJ9kn3SbhJ+Em5SbhJ90n4SblJ+Um6SblJ+En5SbpJ+km7SbpJ+Un6SbtJ+0m8SbtJ+kn7SbxJ/Em9SbxJ+0n8Sb1J/Um+Sb1J/En9Sb5J/km/Sb5J/Un+Sb9J/0nASb9J/kn/ScBJAErBScBJ/0kASsFJAUrCScFJAEoBSsJJAkrDScJJAUoCSsNJA0rEScNJAkoDSsRJBErFScRJA0oESsVJBUrGScVJBEoFSsZJBkrHScZJBUoGSsdJB0rIScdJBkoHSshJCErJSchJB0oISslJCUrKSclJCEoJSspJCkrLScpJCUoKSstJC0rMSctJCkoLSsxJDErNScxJC0oMSs1JDUrOSc1JDEoNSs5JDkrPSc5JDUoOSs9JD0rQSc9JDkoPStBJEErRSdBJD0oQStFJEUrSSdFJEEoRStJJEkrTSdJJEUoSStNJE0rUSdNJEkoTStRJFErVSdRJE0oUStVJFUrWSdVJFEoVStZJFkrXSdZJFUoWStdJF0rYSddJFkoXSthJGErZSdhJF0oYStlJGUraSdlJGEoZStpJGkrbSdpJGUoaSttJZQkkCdtJGkplCRsXG0rcSRsX2hYbStxJHErdSdxJG0ocSt1JHUreSd1JHEodSt5JHkrfSd5JHUoeSt9JH0rgSd9JHkofSuBJIErhSeBJH0ogSuFJIUriSeFJIEohSuJJIkrjSeJJIUoiSuNJI0rkSeNJIkojSuRJJErlSeRJI0okSuVJJUrmSeVJJEolSuZJJkrnSeZJJUomSudJJ0roSedJJkonSuhJKErpSehJJ0ooSulJKUrqSelJKEopSupJKkrrSepJKUoqSutJK0rsSetJKkorSuxJLErtSexJK0osSu1JLUruSe1JLEotSu5JLkrvSe5JLUouSu9JL0rwSe9JLkovSvBJMErxSfBJL0owSvFJMUrySfFJMEoxSvJJMkrzSfJJMUoySvNJM0r0SfNJMkozSvRJNEr1SfRJM0o0SvVJNUr2SfVJNEo1SvZJNkr3SfZJNUo2SvdJN0r4SfdJNko3SvhJOEr5SfhJN0o4SvlJOUr6SflJOEo5SvpJOkr7SfpJOUo6SvtJO0r8SftJOko7SvxJPEr9SfxJO0o8Sv1JPUr+Sf1JPEo9Sv5JPkr/Sf5JPUo+Sv9JP0oASv9JPko/SgBKQEoBSgBKP0pASgFKQUoCSgFKQEpBSgJKQkoDSgJKQUpCSgNKQ0oESgNKQkpDSgRKREoFSgRKQ0pESgVKRUoGSgVKREpFSgZKRkoHSgZKRUpGSgdKR0oISgdKRkpHSghKSEoJSghKR0pISglKSUoKSglKSEpJSgpKSkoLSgpKSUpKSgtKS0oMSgtKSkpLSgxKTEoNSgxKS0pMSg1KTUoOSg1KTEpNSg5KTkoPSg5KTUpOSg9KT0oQSg9KTkpPShBKUEoRShBKT0pQShFKUUoSShFKUEpRShJKUkoTShJKUUpSShNKU0oUShNKUkpTShRKVEoVShRKU0pUShVKVUoWShVKVEpVShZKVkoXShZKVUpWShdKV0oYShdKVkpXShhKWEoZShhKV0pYShlKWUoaShlKWEpZShpKpgllCRpKWUqmCdoWWkobStoWmRZaShtKW0ocShtKWkpbShxKXEodShxKW0pcSh1KXUoeSh1KXEpdSh5KXkofSh5KXUpeSh9KX0ogSh9KXkpfSiBKYEohSiBKX0pgSiFKYUoiSiFKYEphSiJKYkojSiJKYUpiSiNKY0okSiNKYkpjSiRKZEolSiRKY0pkSiVKZUomSiVKZEplSiZKZkonSiZKZUpmSidKZ0ooSidKZkpnSihKaEopSihKZ0poSilKaUoqSilKaEppSipKakorSipKaUpqSitKa0osSitKakprSixKbEotSixKa0psSi1KbUouSi1KbEptSi5KbkovSi5KbUpuSi9Kb0owSi9KbkpvSjBKcEoxSjBKb0pwSjFKcUoySjFKcEpxSjJKckozSjJKcUpySjNKc0o0SjNKckpzSjRKdEo1SjRKc0p0SjVKdUo2SjVKdEp1SjZKdko3SjZKdUp2SjdKd0o4SjdKdkp3SjhKeEo5SjhKd0p4SjlKeUo6SjlKeEp5SjpKeko7SjpKeUp6SjtKe0o8SjtKekp7SjxKfEo9SjxKe0p8Sj1KfUo+Sj1KfEp9Sj5Kfko/Sj5KfUp+Sj9Kf0pASj9Kfkp/SkBKgEpBSkBKf0qASkFKgUpCSkFKgEqBSkJKgkpDSkJKgUqCSkNKg0pESkNKgkqDSkRKhEpFSkRKg0qESkVKhUpGSkVKhEqFSkZKhkpHSkZKhUqGSkdKh0pISkdKhkqHSkhKiEpJSkhKh0qISklKiUpKSklKiEqJSkpKikpLSkpKiUqKSktKi0pMSktKikqLSkxKjEpNSkxKi0qMSk1KjUpOSk1KjEqNSk5KjkpPSk5KjUqOSk9Kj0pQSk9KjkqPSlBKkEpRSlBKj0qQSlFKkUpSSlFKkEqRSlJKkkpTSlJKkUqSSlNKk0pUSlNKkkqTSlRKlEpVSlRKk0qUSlVKlUpWSlVKlEqVSlZKlkpXSlZKlUqWSldKl0pYSldKlkqXSlhKmEpZSlhKl0qYSllK5wmmCVlKmErnCZkWmUpaSpkWWBaZSlpKmkpbSlpKmUqaSltKm0pcSltKmkqbSlxKnEpdSlxKm0qcSl1KnUpeSl1KnEqdSl5KnkpfSl5KnUqeSl9Kn0pgSl9KnkqfSmBKoEphSmBKn0qgSmFKoUpiSmFKoEqhSmJKokpjSmJKoUqiSmNKo0pkSmNKokqjSmRKpEplSmRKo0qkSmVKpUpmSmVKpEqlSmZKpkpnSmZKpUqmSmdKp0poSmdKpkqnSmhKqEppSmhKp0qoSmlKqUpqSmlKqEqpSmpKqkprSmpKqUqqSmtKq0psSmtKqkqrSmxKrEptSmxKq0qsSm1KrUpuSm1KrEqtSm5KrkpvSm5KrUquSm9Kr0pwSm9KrkqvSnBKsEpxSnBKr0qwSnFKsUpySnFKsEqxSnJKskpzSnJKsUqySnNKs0p0SnNKskqzSnRKtEp1SnRKs0q0SnVKtUp2SnVKtEq1SnZKtkp3SnZKtUq2SndKt0p4SndKtkq3SnhKuEp5SnhKt0q4SnlKuUp6SnlKuEq5SnpKukp7SnpKuUq6SntKu0p8SntKukq7SnxKvEp9SnxKu0q8Sn1KvUp+Sn1KvEq9Sn5Kvkp/Sn5KvUq+Sn9Kv0qASn9Kvkq/SoBKwEqBSoBKv0rASoFKwUqCSoFKwErBSoJKwkqDSoJKwUrCSoNKw0qESoNKwkrDSoRKxEqFSoRKw0rESoVKxUqGSoVKxErFSoZKxkqHSoZKxUrGSodKx0qISodKxkrHSohKyEqJSohKx0rISolKyUqKSolKyErJSopKykqLSopKyUrKSotKy0qMSotKykrLSoxKzEqNSoxKy0rMSo1KzUqOSo1KzErNSo5KzkqPSo5KzUrOSo9Kz0qQSo9KzkrPSpBK0EqRSpBKz0rQSpFK0UqSSpFK0ErRSpJK0kqTSpJK0UrSSpNK00qUSpNK0krTSpRK1EqVSpRK00rUSpVK1UqWSpVK1ErVSpZK1kqXSpZK1UrWSpdK10qYSpdK1krXSphKKArnCZhK10ooClgW2EqZSlgWFxbYSplK2UqaSplK2ErZSppK2kqbSppK2UraSptK20qcSptK2krbSpxK3EqdSpxK20rcSp1K3UqeSp1K3ErdSp5K3kqfSp5K3UreSp9K30qgSp9K3krfSqBK4EqhSqBK30rgSqFK4UqiSqFK4ErhSqJK4kqjSqJK4UriSqNK40qkSqNK4krjSqRK5EqlSqRK40rkSqVK5UqmSqVK5ErlSqZK5kqnSqZK5UrmSqdK50qoSqdK5krnSqhK6EqpSqhK50roSqlK6UqqSqlK6ErpSqpK6kqrSqpK6UrqSqtK60qsSqtK6krrSqxK7EqtSqxK60rsSq1K7UquSq1K7ErtSq5K7kqvSq5K7UruSq9K70qwSq9K7krvSrBK8EqxSrBK70rwSrFK8UqySrFK8ErxSrJK8kqzSrJK8UrySrNK80q0SrNK8krzSrRK9Eq1SrRK80r0SrVK9Uq2SrVK9Er1SrZK9kq3SrZK9Ur2SrdK90q4SrdK9kr3SrhK+Eq5SrhK90r4SrlK+Uq6SrlK+Er5SrpK+kq7SrpK+Ur6SrtK+0q8SrtK+kr7SrxK/Eq9SrxK+0r8Sr1K/Uq+Sr1K/Er9Sr5K/kq/Sr5K/Ur+Sr9K/0rASr9K/kr/SsBKAEvBSsBK/0oAS8FKAUvCSsFKAEsBS8JKAkvDSsJKAUsCS8NKA0vESsNKAksDS8RKBEvFSsRKA0sES8VKBUvGSsVKBEsFS8ZKBkvHSsZKBUsGS8dKB0vISsdKBksHS8hKCEvJSshKB0sIS8lKCUvKSslKCEsJS8pKCkvLSspKCUsKS8tKC0vMSstKCksLS8xKDEvNSsxKC0sMS81KDUvOSs1KDEsNS85KDkvPSs5KDUsOS89KD0vQSs9KDksPS9BKEEvRStBKD0sQS9FKEUvSStFKEEsRS9JKEkvTStJKEUsSS9NKE0vUStNKEksTS9RKFEvVStRKE0sUS9VKFUvWStVKFEsVS9ZKFkvXStZKFUsWS9dKaQooCtdKFktpChcWF0vYShcW1hUXS9hKGEvZSthKF0sYS9lKGUvaStlKGEsZS9pKGkvbStpKGUsaS9tKG0vcSttKGksbS9xKHEvdStxKG0scS91KHUveSt1KHEsdS95KHkvfSt5KHUseS99KH0vgSt9KHksfS+BKIEvhSuBKH0sgS+FKIUviSuFKIEshS+JKIkvjSuJKIUsiS+NKI0vkSuNKIksjS+RKJEvlSuRKI0skS+VKJUvmSuVKJEslS+ZKJkvnSuZKJUsmS+dKJ0voSudKJksnS+hKKEvpSuhKJ0soS+lKKUvqSulKKEspS+pKKkvrSupKKUsqS+tKK0vsSutKKksrS+xKLEvtSuxKK0ssS+1KLUvuSu1KLEstS+5KLkvvSu5KLUsuS+9KL0vwSu9KLksvS/BKMEvxSvBKL0swS/FKMUvySvFKMEsxS/JKMkvzSvJKMUsyS/NKM0v0SvNKMkszS/RKNEv1SvRKM0s0S/VKNUv2SvVKNEs1S/ZKNkv3SvZKNUs2S/dKN0v4SvdKNks3S/hKOEv5SvhKN0s4S/lKOUv6SvlKOEs5S/pKOkv7SvpKOUs6S/tKO0v8SvtKOks7S/xKPEv9SvxKO0s8S/1KPUv+Sv1KPEs9S/5KPkv/Sv5KPUs+S/9KP0sAS/9KPks/SwBLQEsBSwBLP0tASwFLQUsCSwFLQEtBSwJLQksDSwJLQUtCSwNLQ0sESwNLQktDSwRLREsFSwRLQ0tESwVLRUsGSwVLREtFSwZLRksHSwZLRUtGSwdLR0sISwdLRktHSwhLSEsJSwhLR0tISwlLSUsKSwlLSEtJSwpLSksLSwpLSUtKSwtLS0sMSwtLSktLSwxLTEsNSwxLS0tMSw1LTUsOSw1LTEtNSw5LTksPSw5LTUtOSw9LT0sQSw9LTktPSxBLUEsRSxBLT0tQSxFLUUsSSxFLUEtRSxJLUksTSxJLUUtSSxNLU0sUSxNLUktTSxRLVEsVSxRLU0tUSxVLVUsWSxVLVEtVSxZLqgppChZLVUuqCtYVVksXS9YVlRVWSxdLV0sYSxdLVktXSxhLWEsZSxhLV0tYSxlLWUsaSxlLWEtZSxpLWksbSxpLWUtaSxtLW0scSxtLWktbSxxLXEsdSxxLW0tcSx1LXUseSx1LXEtdSx5LXksfSx5LXUteSx9LX0sgSx9LXktfSyBLYEshSyBLX0tgSyFLYUsiSyFLYEthSyJLYksjSyJLYUtiSyNLY0skSyNLYktjSyRLZEslSyRLY0tkSyVLZUsmSyVLZEtlSyZLZksnSyZLZUtmSydLZ0soSydLZktnSyhLaEspSyhLZ0toSylLaUsqSylLaEtpSypLaksrSypLaUtqSytLa0ssSytLaktrSyxLbEstSyxLa0tsSy1LbUsuSy1LbEttSy5LbksvSy5LbUtuSy9Lb0swSy9LbktvSzBLcEsxSzBLb0twSzFLcUsySzFLcEtxSzJLckszSzJLcUtySzNLc0s0SzNLcktzSzRLdEs1SzRLc0t0SzVLdUs2SzVLdEt1SzZLdks3SzZLdUt2SzdLd0s4SzdLdkt3SzhLeEs5SzhLd0t4SzlLeUs6SzlLeEt5SzpLeks7SzpLeUt6SztLe0s8SztLekt7SzxLfEs9SzxLe0t8Sz1LfUs+Sz1LfEt9Sz5Lfks/Sz5LfUt+Sz9Lf0tASz9Lfkt/S0BLgEtBS0BLf0uAS0FLgUtCS0FLgEuBS0JLgktDS0JLgUuCS0NLg0tES0NLgkuDS0RLhEtFS0RLg0uES0VLhUtGS0VLhEuFS0ZLhktHS0ZLhUuGS0dLh0tIS0dLhkuHS0hLiEtJS0hLh0uIS0lLiUtKS0lLiEuJS0pLiktLS0pLiUuKS0tLi0tMS0tLikuLS0xLjEtNS0xLi0uMS01LjUtOS01LjEuNS05LjktPS05LjUuOS09Lj0tQS09LjkuPS1BLkEtRS1BLj0uQS1FLkUtSS1FLkEuRS1JLkktTS1JLkUuSS1NLk0tUS1NLkkuTS1RLlEtVS1RLk0uUS1VL6wqqClVLlEvrCpUVlUtWS5UVVBWVS1ZLlktXS1ZLlUuWS1dLl0tYS1dLlkuXS1hLmEtZS1hLl0uYS1lLmUtaS1lLmEuZS1pLmktbS1pLmUuaS1tLm0tcS1tLmkubS1xLnEtdS1xLm0ucS11LnUteS11LnEudS15LnktfS15LnUueS19Ln0tgS19LnkufS2BLoEthS2BLn0ugS2FLoUtiS2FLoEuhS2JLoktjS2JLoUuiS2NLo0tkS2NLokujS2RLpEtlS2RLo0ukS2VLpUtmS2VLpEulS2ZLpktnS2ZLpUumS2dLp0toS2dLpkunS2hLqEtpS2hLp0uoS2lLqUtqS2lLqEupS2pLqktrS2pLqUuqS2tLq0tsS2tLqkurS2xLrEttS2xLq0usS21LrUtuS21LrEutS25LrktvS25LrUuuS29Lr0twS29LrkuvS3BLsEtxS3BLr0uwS3FLsUtyS3FLsEuxS3JLsktzS3JLsUuyS3NLs0t0S3NLskuzS3RLtEt1S3RLs0u0S3VLtUt2S3VLtEu1S3ZLtkt3S3ZLtUu2S3dLt0t4S3dLtku3S3hLuEt5S3hLt0u4S3lLuUt6S3lLuEu5S3pLukt7S3pLuUu6S3tLu0t8S3tLuku7S3xLvEt9S3xLu0u8S31LvUt+S31LvEu9S35Lvkt/S35LvUu+S39Lv0uAS39Lvku/S4BLwEuBS4BLv0vAS4FLwUuCS4FLwEvBS4JLwkuDS4JLwUvCS4NLw0uES4NLwkvDS4RLxEuFS4RLw0vES4VLxUuGS4VLxEvFS4ZLxkuHS4ZLxUvGS4dLx0uIS4dLxkvHS4hLyEuJS4hLx0vIS4lLyUuKS4lLyEvJS4pLykuLS4pLyUvKS4tLy0uMS4tLykvLS4xLzEuNS4xLy0vMS41LzUuOS41LzEvNS45LzkuPS45LzUvOS49Lz0uQS49LzkvPS5BL0EuRS5BLz0vQS5FL0UuSS5FL0EvRS5JL0kuTS5JL0UvSS5NL00uUS5NL0kvTS5RLLAvrCpRL00ssC1QV1EuVS1QVExXUS5VL1UuWS5VL1EvVS5ZL1kuXS5ZL1UvWS5dL10uYS5dL1kvXS5hL2EuZS5hL10vYS5lL2UuaS5lL2EvZS5pL2kubS5pL2UvaS5tL20ucS5tL2kvbS5xL3EudS5xL20vcS51L3UueS51L3EvdS55L3kufS55L3UveS59L30ugS59L3kvfS6BL4EuhS6BL30vgS6FL4UuiS6FL4EvhS6JL4kujS6JL4UviS6NL40ukS6NL4kvjS6RL5EulS6RL40vkS6VL5UumS6VL5EvlS6ZL5kunS6ZL5UvmS6dL50uoS6dL5kvnS6hL6EupS6hL50voS6lL6UuqS6lL6EvpS6pL6kurS6pL6UvqS6tL60usS6tL6kvrS6xL7EutS6xL60vsS61L7UuuS61L7EvtS65L7kuvS65L7UvuS69L70uwS69L7kvvS7BL8EuxS7BL70vwS7FL8UuyS7FL8EvxS7JL8kuzS7JL8UvyS7NL80u0S7NL8kvzS7RL9Eu1S7RL80v0S7VL9Uu2S7VL9Ev1S7ZL9ku3S7ZL9Uv2S7dL90u4S7dL9kv3S7hL+Eu5S7hL90v4S7lL+Uu6S7lL+Ev5S7pL+ku7S7pL+Uv6S7tL+0u8S7tL+kv7S7xL/Eu9S7xL+0v8S71L/Uu+S71L/Ev9S75L/ku/S75L/Uv+S79L/0vAS79L/kv/S8BLAEzBS8BL/0sATMFLAUzCS8FLAEwBTMJLAkzDS8JLAUwCTMNLA0zES8NLAkwDTMRLBEzFS8RLA0wETMVLBUzGS8VLBEwFTMZLBkzHS8ZLBUwGTMdLB0zIS8dLBkwHTMhLCEzJS8hLB0wITMlLCUzKS8lLCEwJTMpLCkzLS8pLCUwKTMtLC0zMS8tLCkwLTMxLDEzNS8xLC0wMTM1LDUzOS81LDEwNTM5LDkzPS85LDUwOTM9LD0zQS89LDkwPTNBLEEzRS9BLD0wQTNFLEUzSS9FLEEwRTNJLEkzTS9JLEUwSTNNLbQssC9NLEkxtCxMVE0zUSxMV0hQTTNRLFEzVS9RLE0wUTNVLFUzWS9VLFEwVTNZLFkzXS9ZLFUwWTNdLF0zYS9dLFkwXTNhLGEzZS9hLF0wYTNlLGUzaS9lLGEwZTNpLGkzbS9pLGUwaTNtLG0zcS9tLGkwbTNxLHEzdS9xLG0wcTN1LHUzeS91LHEwdTN5LHkzfS95LHUweTN9LH0zgS99LHkwfTOBLIEzhS+BLH0wgTOFLIUziS+FLIEwhTOJLIkzjS+JLIUwiTONLI0zkS+NLIkwjTORLJEzlS+RLI0wkTOVLJUzmS+VLJEwlTOZLJkznS+ZLJUwmTOdLJ0zoS+dLJkwnTOhLKEzpS+hLJ0woTOlLKUzqS+lLKEwpTOpLKkzrS+pLKUwqTOtLK0zsS+tLKkwrTOxLLEztS+xLK0wsTO1LLUzuS+1LLEwtTO5LLkzvS+5LLUwuTO9LL0zwS+9LLkwvTPBLMEzxS/BLL0wwTPFLMUzyS/FLMEwxTPJLMkzzS/JLMUwyTPNLM0z0S/NLMkwzTPRLNEz1S/RLM0w0TPVLNUz2S/VLNEw1TPZLNkz3S/ZLNUw2TPdLN0z4S/dLNkw3TPhLOEz5S/hLN0w4TPlLOUz6S/lLOEw5TPpLOkz7S/pLOUw6TPtLO0z8S/tLOkw7TPxLPEz9S/xLO0w8TP1LPUz+S/1LPEw9TP5LPkz/S/5LPUw+TP9LP0wATP9LPkw/TABMQEwBTABMP0xATAFMQUwCTAFMQExBTAJMQkwDTAJMQUxCTANMQ0wETANMQkxDTARMREwFTARMQ0xETAVMRUwGTAVMRExFTAZMRkwHTAZMRUxGTAdMR0wITAdMRkxHTAhMSEwJTAhMR0xITAlMSUwKTAlMSExJTApMSkwLTApMSUxKTAtMS0wMTAtMSkxLTAxMTEwNTAxMS0xMTA1MTUwOTA1MTExNTA5MTkwPTA5MTUxOTA9MT0wQTA9MTkxPTBBMUEwRTBBMT0xQTBFMUUwSTBFMUExRTBJMrgttCxJMUUyuC9IUUkwTTNIUkRRSTBNMU0wUTBNMUkxTTBRMVEwVTBRMU0xUTBVMVUwWTBVMVExVTBZMVkwXTBZMVUxWTBdMV0wYTBdMVkxXTBhMWEwZTBhMV0xYTBlMWUwaTBlMWExZTBpMWkwbTBpMWUxaTBtMW0wcTBtMWkxbTBxMXEwdTBxMW0xcTB1MXUweTB1MXExdTB5MXkwfTB5MXUxeTB9MX0wgTB9MXkxfTCBMYEwhTCBMX0xgTCFMYUwiTCFMYExhTCJMYkwjTCJMYUxiTCNMY0wkTCNMYkxjTCRMZEwlTCRMY0xkTCVMZUwmTCVMZExlTCZMZkwnTCZMZUxmTCdMZ0woTCdMZkxnTChMaEwpTChMZ0xoTClMaUwqTClMaExpTCpMakwrTCpMaUxqTCtMa0wsTCtMakxrTCxMbEwtTCxMa0xsTC1MbUwuTC1MbExtTC5MbkwvTC5MbUxuTC9Mb0wwTC9MbkxvTDBMcEwxTDBMb0xwTDFMcUwyTDFMcExxTDJMckwzTDJMcUxyTDNMc0w0TDNMckxzTDRMdEw1TDRMc0x0TDVMdUw2TDVMdEx1TDZMdkw3TDZMdUx2TDdMd0w4TDdMdkx3TDhMeEw5TDhMd0x4TDlMeUw6TDlMeEx5TDpMekw7TDpMeUx6TDtMe0w8TDtMekx7TDxMfEw9TDxMe0x8TD1MfUw+TD1MfEx9TD5Mfkw/TD5MfUx+TD9Mf0xATD9Mfkx/TEBMgExBTEBMf0yATEFMgUxCTEFMgEyBTEJMgkxDTEJMgUyCTENMg0xETENMgkyDTERMhExFTERMg0yETEVMhUxGTEVMhEyFTEZMhkxHTEZMhUyGTEdMh0xITEdMhkyHTEhMiExJTEhMh0yITElMiUxKTElMiEyJTEpMikxLTEpMiUyKTEtMi0xMTEtMikyLTExMjExNTExMi0yMTE1MjUxOTE1MjEyNTE5MjkxPTE5MjUyOTE9Mj0xQTE9MjkyPTFBMkExRTFBMj0yQTFFM7wuuC1FMkEzvC5EUkUxSTJEUUBSRTFJMkkxTTFJMkUySTFNMk0xUTFNMkkyTTFRMlExVTFRMk0yUTFVMlUxWTFVMlEyVTFZMlkxXTFZMlUyWTFdMl0xYTFdMlkyXTFhMmExZTFhMl0yYTFlMmUxaTFlMmEyZTFpMmkxbTFpMmUyaTFtMm0xcTFtMmkybTFxMnExdTFxMm0ycTF1MnUxeTF1MnEydTF5MnkxfTF5MnUyeTF9Mn0xgTF9MnkyfTGBMoExhTGBMn0ygTGFMoUxiTGFMoEyhTGJMokxjTGJMoUyiTGNMo0xkTGNMokyjTGRMpExlTGRMo0ykTGVMpUxmTGVMpEylTGZMpkxnTGZMpUymTGdMp0xoTGdMpkynTGhMqExpTGhMp0yoTGlMqUxqTGlMqEypTGpMqkxrTGpMqUyqTGtMq0xsTGtMqkyrTGxMrExtTGxMq0ysTG1MrUxuTG1MrEytTG5MrkxvTG5MrUyuTG9Mr0xwTG9MrkyvTHBMsExxTHBMr0ywTHFMsUxyTHFMsEyxTHJMskxzTHJMsUyyTHNMs0x0THNMskyzTHRMtEx1THRMs0y0THVMtUx2THVMtEy1THZMtkx3THZMtUy2THdMt0x4THdMtky3THhMuEx5THhMt0y4THlMuUx6THlMuEy5THpMukx7THpMuUy6THtMu0x8THtMuky7THxMvEx9THxMu0y8TH1MvUx+TH1MvEy9TH5Mvkx/TH5MvUy+TH9Mv0yATH9Mvky/TIBMwEyBTIBMv0zATIFMwUyCTIFMwEzBTIJMwkyDTIJMwUzCTINMw0yETINMwkzDTIRMxEyFTIRMw0zETIVMxUyGTIVMxEzFTIZMxkyHTIZMxUzGTIdMx0yITIdMxkzHTIhMyEyJTIhMx0zITIlMyUyKTIlMyEzJTIpMykyLTIpMyUzKTItMy0yMTItMykzLTIxMzEyNTIxMy0zMTI1MzUyOTI1MzEzNTI5MzkyPTI5MzUzOTI9Mz0yQTI9MzkzPTJBMMAzvC5BMz0wwDFAU0EyRTFAUDxTQTJFM0UySTJFM0EzRTJJM0kyTTJJM0UzSTJNM00yUTJNM0kzTTJRM1EyVTJRM00zUTJVM1UyWTJVM1EzVTJZM1kyXTJZM1UzWTJdM10yYTJdM1kzXTJhM2EyZTJhM10zYTJlM2UyaTJlM2EzZTJpM2kybTJpM2UzaTJtM20ycTJtM2kzbTJxM3EydTJxM20zcTJ1M3UyeTJ1M3EzdTJ5M3kyfTJ5M3UzeTJ9M30ygTJ9M3kzfTKBM4EyhTKBM30zgTKFM4UyiTKFM4EzhTKJM4kyjTKJM4UziTKNM40ykTKNM4kzjTKRM5EylTKRM40zkTKVM5UymTKVM5EzlTKZM5kynTKZM5UzmTKdM50yoTKdM5kznTKhM6EypTKhM50zoTKlM6UyqTKlM6EzpTKpM6kyrTKpM6UzqTKtM60ysTKtM6kzrTKxM7EytTKxM60zsTK1M7UyuTK1M7EztTK5M7kyvTK5M7UzuTK9M70ywTK9M7kzvTLBM8EyxTLBM70zwTLFM8UyyTLFM8EzxTLJM8kyzTLJM8UzyTLNM80y0TLNM8kzzTLRM9Ey1TLRM80z0TLVM9Uy2TLVM9Ez1TLZM9ky3TLZM9Uz2TLdM90y4TLdM9kz3TLhM+Ey5TLhM90z4TLlM+Uy6TLlM+Ez5TLpM+ky7TLpM+Uz6TLtM+0y8TLtM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jU2OTU9Nj01QTU9Njk2PTVBNkE1RTVBNj02QTVFNkU1STVFNkE2RTVJNkk1TTVJNkU2STVNNk01UTVNNkk2TTVRNlE1VTVRNk02UTVVNlU1WTVVNlE2VTVZNlk1XTVZNlU2WTVdNl01YTVdNlk2XTVhNmE1ZTVhNl02YTVlNmU1aTVlNmE2ZTVpNmk1bTVpNmU2aTVtNm01cTVtNmk2bTVxNnE1dTVxNm02cTV1NnU1eTV1NnE2dTV5Nnk1fTV5NnU2eTV9Nn01gTV9Nnk2fTWBNoE1hTWBNn02gTWFNoU1iTWFNoE2hTWJNok1jTWJNoU2iTWNNo01kTWNNok2jTWRNpE1lTWRNo02kTWVNpU1mTWVNpE2lTWZNpk1nTWZNpU2mTWdNp01oTWdNpk2nTWhNqE1pTWhNp02oTWlNqU1qTWlNqE2pTWpNqk1rTWpNqU2qTWtNq01sTWtNqk2rTWxNrE1tTWxNq02sTW1NrU1uTW1NrE2tTW5Nrk1vTW5NrU2uTW9Nr01wTW9Nrk2vTXBNsE1xTXBNr02wTXFNsU1yTXFNsE2xTXJNsk1zTXJNsU2yTXNNs010TXNNsk2zTXRNtE11TXRNs020TXVNtU12TXVNtE21TXZNtk13TXZNtU22TXdNt014TXdNtk23TXhNuE15TXhNt024TXlNuU16TXlNuE25TXpNuk17TXpNuU26TXtNu018TXtNuk27TXxNvE19TXxNu028TX1NvU1+TX1NvE29TX5Nvk1/TX5NvU2+TX9Nv02ATX9Nvk2/TYBNwE2BTYBNv03ATYFNwU2CTYFNwE3BTYJNwk2DTYJNwU3CTYNNw02ETYNNwk3DTYRNxE2FTYRNw03ETYVNxU2GTYVNxE3FTYZNxk2HTYZNxU3GTYdNx02ITYdNxk3HTYhNyE2JTYhNx03ITYlNyU2KTYlNyE3JTYpNyk2LTYpNyU3KTYtNy02MTYtNyk3LTYxNNA3zDIxNy000DUwTzE2NTUwTCxPMTY1NzU2OTY1NzE3NTY5Nzk2PTY5NzU3OTY9Nz02QTY9Nzk3PTZBN0E2RTZBNz03QTZFN0U2STZFN0E3RTZJN0k2TTZJN0U3STZNN002UTZNN0k3TTZRN1E2VTZRN003UTZVN1U2WTZVN1E3VTZZN1k2XTZZN1U3WTZdN102YTZdN1k3XTZhN2E2ZTZhN103YTZlN2U2aTZlN2E3ZTZpN2k2bTZpN2U3aTZtN202cTZtN2k3bTZxN3E2dTZxN203cTZ1N3U2eTZ1N3E3dTZ5N3k2fTZ5N3U3eTZ9N302gTZ9N3k3fTaBN4E2hTaBN303gTaFN4U2iTaFN4E3hTaJN4k2jTaJN4U3iTaNN402kTaNN4k3jTaRN5E2lTaRN403kTaVN5U2mTaVN5E3lTaZN5k2nTaZN5U3mTadN502oTadN5k3nTahN6E2pTahN503oTalN6U2qTalN6E3pTapN6k2rTapN6U3qTatN602sTatN6k3rTaxN7E2tTaxN603sTa1N7U2uTa1N7E3tTa5N7k2vTa5N7U3uTa9N702wTa9N7k3vTbBN8E2xTbBN703wTbFN8U2yTbFN8E3xTbJN8k2zTbJN8U3yTbNN8020TbNN8k3zTbRN9E21TbRN8030TbVN9U22TbVN9E31TbZN9k23TbZN9U32TbdN9024TbdN9k33TbhN+E25TbhN9034TblN+U26TblN+E35TbpN+k27TbpN+U36TbtN+028TbtN+k37TbxN/E29TbxN+038Tb1N/U2+Tb1N/E39Tb5N/k2/Tb5N/U3+Tb9N/03ATb9N/k3/TcBNAE7BTcBN/00ATsFNAU7CTcFNAE4BTsJNAk7DTcJNAU4CTsNNA07ETcNNAk4DTsRNBE7FTcRNA04ETsVNBU7GTcVNBE4FTsZNBk7HTcZNBU4GTsdNB07ITcdNBk4HTshNCE7JTchNB04ITslNCU7KTclNCE4JTspNCk7LTcpNCU4KTstNdQ00DctNCk51DQsTC07MTQsTyhILTsxNDE7NTcxNC04MTs1NDU7OTc1NDE4NTs5NDk7PTc5NDU4OTs9ND07QTc9NDk4PTtBNEE7RTdBND04QTtFNEU7STdFNEE4RTtJNEk7TTdJNEU4STtNNE07UTdNNEk4TTtRNFE7VTdRNE04UTtVNFU7WTdVNFE4VTtZNFk7XTdZNFU4WTtdNF07YTddNFk4XTthNGE7ZTdhNF04YTtlNGU7aTdlNGE4ZTtpNGk7bTdpNGU4aTttNG07cTdtNGk4bTtxNHE7dTdxNG04cTt1NHU7eTd1NHE4dTt5NHk7fTd5NHU4eTt9NH07gTd9NHk4fTuBNIE7hTeBNH04gTuFNIU7iTeFNIE4hTuJNIk7jTeJNIU4iTuNNI07kTeNNIk4jTuRNJE7lTeRNI04kTuVNJU7mTeVNJE4lTuZNJk7nTeZNJU4mTudNJ07oTedNJk4nTuhNKE7pTehNJ04oTulNKU7qTelNKE4pTupNKk7rTepNKU4qTutNK07sTetNKk4rTuxNLE7tTexNK04sTu1NLU7uTe1NLE4tTu5NLk7vTe5NLU4uTu9NL07wTe9NLk4vTvBNME7xTfBNL04wTvFNMU7yTfFNME4xTvJNMk7zTfJNMU4yTvNNM070TfNNMk4zTvRNNE71TfRNM040TvVNNU72TfVNNE41TvZNNk73TfZNNU42TvdNN074TfdNNk43TvhNOE75TfhNN044TvlNOU76TflNOE45TvpNOk77TfpNOU46TvtNO078TftNOk47TvxNPE79TfxNO048Tv1NPU7+Tf1NPE49Tv5NPk7/Tf5NPU4+Tv9NP04ATv9NPk4/TgBOQE4BTgBOP05ATgFOQU4CTgFOQE5BTgJOQk4DTgJOQU5CTgNOQ04ETgNOQk5DTgRORE4FTgROQ05ETgVORU4GTgVORE5FTgZORk4HTgZORU5GTgdOR04ITgdORk5HTghOSE4JTghOR05ITglOSU4KTglOSE5JTgpOtg11DQpOSU62DcoSSk4LTsoSiRJKTgtOS04MTgtOSk5LTgxOTE4NTgxOS05MTg1OTU4OTg1OTE5NTg5OTk4PTg5OTU5OTg9OT04QTg9OTk5PThBOUE4RThBOT05QThFOUU4SThFOUE5RThJOUk4TThJOUU5SThNOU04UThNOUk5TThROVE4VThROU05UThVOVU4WThVOVE5VThZOVk4XThZOVU5WThdOV04YThdOVk5XThhOWE4ZThhOV05YThlOWU4aThlOWE5ZThpOWk4bThpOWU5aThtOW04cThtOWk5bThxOXE4dThxOW05cTh1OXU4eTh1OXE5dTh5OXk4fTh5OXU5eTh9OX04gTh9OXk5fTiBOYE4hTiBOX05gTiFOYU4iTiFOYE5hTiJOYk4jTiJOYU5iTiNOY04kTiNOYk5jTiROZE4lTiROY05kTiVOZU4mTiVOZE5lTiZOZk4nTiZOZU5mTidOZ04oTidOZk5nTihOaE4pTihOZ05oTilOaU4qTilOaE5pTipOak4rTipOaU5qTitOa04sTitOak5rTixObE4tTixOa05sTi1ObU4uTi1ObE5tTi5Obk4vTi5ObU5uTi9Ob04wTi9Obk5vTjBOcE4xTjBOb05wTjFOcU4yTjFOcE5xTjJOck4zTjJOcU5yTjNOc040TjNOck5zTjROdE41TjROc050TjVOdU42TjVOdE51TjZOdk43TjZOdU52TjdOd044TjdOdk53TjhOeE45TjhOd054TjlOeU46TjlOeE55TjpOek47TjpOeU56TjtOe048TjtOek57TjxOfE49TjxOe058Tj1OfU4+Tj1OfE59Tj5Ofk4/Tj5OfU5+Tj9Of05ATj9Ofk5/TkBOgE5BTkBOf06ATkFOgU5CTkFOgE6BTkJOgk5DTkJOgU6CTkNOg05ETkNOgk6DTkROhE5FTkROg06ETkVOhU5GTkVOhE6FTkZOhk5HTkZOhU6GTkdOh05ITkdOhk6HTkhOiE5JTkhOh06ITklO9w22DUlOiE73DYkSiU5KTokSSBKJTkpOik5LTkpOiU6KTktOi05MTktOik6LTkxOjE5NTkxOi06MTk1OjU5OTk1OjE6NTk5Ojk5PTk5OjU6OTk9Oj05QTk9Ojk6PTlBOkE5RTlBOj06QTlFOkU5STlFOkE6RTlJOkk5TTlJOkU6STlNOk05UTlNOkk6TTlROlE5VTlROk06UTlVOlU5WTlVOlE6VTlZOlk5XTlZOlU6WTldOl05YTldOlk6XTlhOmE5ZTlhOl06YTllOmU5aTllOmE6ZTlpOmk5bTlpOmU6aTltOm05cTltOmk6bTlxOnE5dTlxOm06cTl1OnU5eTl1OnE6dTl5Onk5fTl5OnU6eTl9On05gTl9Onk6fTmBOoE5hTmBOn06gTmFOoU5iTmFOoE6hTmJOok5jTmJOoU6iTmNOo05kTmNOok6jTmROpE5lTmROo06kTmVOpU5mTmVOpE6lTmZOpk5nTmZOpU6mTmdOp05oTmdOpk6nTmhOqE5pTmhOp06oTmlOqU5qTmlOqE6pTmpOqk5rTmpOqU6qTmtOq05sTmtOqk6rTmxOrE5tTmxOq06sTm1OrU5uTm1OrE6tTm5Ork5vTm5OrU6uTm9Or05wTm9Ork6vTnBOsE5xTnBOr06wTnFOsU5yTnFOsE6xTnJOsk5zTnJOsU6yTnNOs050TnNOsk6zTnROtE51TnROs060TnVOtU52TnVOtE61TnZOtk53TnZOtU62TndOt054TndOtk63TnhOuE55TnhOt064TnlOuU56TnlOuE65TnpOuk57TnpOuU66TntOu058TntOuk67TnxOvE59TnxOu068Tn1OvU5+Tn1OvE69Tn5Ovk5/Tn5OvU6+Tn9Ov06ATn9Ovk6/ToBOwE6BToBOv07AToFOwU6CToFOwE7BToJOwk6DToJOwU7CToNOw06EToNOwk7DToROxE6FToROw07EToVOxU6GToVOxE7FToZOxk6HToZOxU7GTodOx06ITodOxk7HTohOOA73DYhOx044DkgSyE6JTkgSBxLITolOyU6KTolOyE7JTopOyk6LTopOyU7KTotOy06MTotOyk7LToxOzE6NToxOy07MTo1OzU6OTo1OzE7NTo5Ozk6PTo5OzU7OTo9Oz06QTo9Ozk7PTpBO0E6RTpBOz07QTpFO0U6STpFO0E7RTpJO0k6TTpJO0U7STpNO006UTpNO0k7TTpRO1E6VTpRO007UTpVO1U6WTpVO1E7VTpZO1k6XTpZO1U7WTpdO106YTpdO1k7XTphO2E6ZTphO107YTplO2U6aTplO2E7ZTppO2k6bTppO2U7aTptO206cTptO2k7bTpxO3E6dTpxO207cTp1O3U6eTp1O3E7dTp5O3k6fTp5O3U7eTp9O306gTp9O3k7fTqBO4E6hTqBO307gTqFO4U6iTqFO4E7hTqJO4k6jTqJO4U7iTqNO406kTqNO4k7jTqRO5E6lTqRO407kTqVO5U6mTqVO5E7lTqZO5k6nTqZO5U7mTqdO506oTqdO5k7nTqhO6E6pTqhO507oTqlO6U6qTqlO6E7pTqpO6k6rTqpO6U7qTqtO606sTqtO6k7rTqxO7E6tTqxO607sTq1O7U6uTq1O7E7tTq5O7k6vTq5O7U7uTq9O706wTq9O7k7vTrBO8E6xTrBO707wTrFO8U6yTrFO8E7xTrJO8k6zTrJO8U7yTrNO8060TrNO8k7zTrRO9E61TrRO8070TrVO9U62TrVO9E71TrZO9k63TrZO9U72TrdO9064TrdO9k73TrhO+E65TrhO9074TrlO+U66TrlO+E75TrpO+k67TrpO+U76TrtO+068TrtO+k77TrxO/E69TrxO+078Tr1O/U6+Tr1O/E79Tr5O/k6/Tr5O/U7+Tr9O/07ATr9O/k7/TsBOAE/BTsBO/04AT8FOAU/CTsFOAE8BT8JOAk/DTsJOAU8CT8NOA0/ETsNOAk8DT8ROBE/FTsROA08ET8VOBU/GTsVOBE8FT8ZOBk/HTsZOBU8GT8dOeQ44DsdOBk95DgcSB0/ITgcSxhEHT8hOCE/JTshOB08IT8lOCU/KTslOCE8JT8pOCk/LTspOCU8KT8tOC0/MTstOCk8LT8xODE/NTsxOC08MT81ODU/OTs1ODE8NT85ODk/PTs5ODU8OT89OD0/QTs9ODk8PT9BOEE/RTtBOD08QT9FOEU/STtFOEE8RT9JOEk/TTtJOEU8ST9NOE0/UTtNOEk8TT9ROFE/VTtROE08UT9VOFU/WTtVOFE8VT9ZOFk/XTtZOFU8WT9dOF0/YTtdOFk8XT9hOGE/ZTthOF08YT9lOGU/aTtlOGE8ZT9pOGk/bTtpOGU8aT9tOG0/cTttOGk8bT9xOHE/dTtxOG08cT91OHU/eTt1OHE8dT95OHk/fTt5OHU8eT99OH0/gTt9OHk8fT+BOIE/hTuBOH08gT+FOIU/iTuFOIE8hT+JOIk/jTuJOIU8iT+NOI0/kTuNOIk8jT+ROJE/lTuROI08kT+VOJU/mTuVOJE8lT+ZOJk/nTuZOJU8mT+dOJ0/oTudOJk8nT+hOKE/pTuhOJ08oT+lOKU/qTulOKE8pT+pOKk/rTupOKU8qT+tOK0/sTutOKk8rT+xOLE/tTuxOK08sT+1OLU/uTu1OLE8tT+5OLk/vTu5OLU8uT+9OL0/wTu9OLk8vT/BOME/xTvBOL08wT/FOMU/yTvFOME8xT/JOMk/zTvJOMU8yT/NOM0/0TvNOMk8zT/RONE/1TvROM080T/VONU/2TvVONE81T/ZONk/3TvZONU82T/dON0/4TvdONk83T/hOOE/5TvhON084T/lOOU/6TvlOOE85T/pOOk/7TvpOOU86T/tOO0/8TvtOOk87T/xOPE/9TvxOO088T/1OPU/+Tv1OPE89T/5OPk//Tv5OPU8+T/9OP08AT/9OPk8/TwBPQE8BTwBPP09ATwFPQU8CTwFPQE9BTwJPQk8DTwJPQU9CTwNPQ08ETwNPQk9DTwRPRE8FTwRPQ09ETwVPRU8GTwVPRE9FTwZPug55DgZPRU+6DsYRRk8HT8YRhRFGTwdPR08ITwdPRk9HTwhPSE8JTwhPR09ITwlPSU8KTwlPSE9JTwpPSk8LTwpPSU9KTwtPS08MTwtPSk9LTwxPTE8NTwxPS09MTw1PTU8OTw1PTE9NTw5PTk8PTw5PTU9OTw9PT08QTw9PTk9PTxBPUE8RTxBPT09QTxFPUU8STxFPUE9RTxJPUk8TTxJPUU9STxNPU08UTxNPUk9TTxRPVE8VTxRPU09UTxVPVU8WTxVPVE9VTxZPVk8XTxZPVU9WTxdPV08YTxdPVk9XTxhPWE8ZTxhPV09YTxlPWU8aTxlPWE9ZTxpPWk8bTxpPWU9aTxtPW08cTxtPWk9bTxxPXE8dTxxPW09cTx1PXU8eTx1PXE9dTx5PXk8fTx5PXU9eTx9PX08gTx9PXk9fTyBPYE8hTyBPX09gTyFPYU8iTyFPYE9hTyJPYk8jTyJPYU9iTyNPY08kTyNPYk9jTyRPZE8lTyRPY09kTyVPZU8mTyVPZE9lTyZPZk8nTyZPZU9mTydPZ08oTydPZk9nTyhPaE8pTyhPZ09oTylPaU8qTylPaE9pTypPak8rTypPaU9qTytPa08sTytPak9rTyxPbE8tTyxPa09sTy1PbU8uTy1PbE9tTy5Pbk8vTy5PbU9uTy9Pb08wTy9Pbk9vTzBPcE8xTzBPb09wTzFPcU8yTzFPcE9xTzJPck8zTzJPcU9yTzNPc080TzNPck9zTzRPdE81TzRPc090TzVPdU82TzVPdE91TzZPdk83TzZPdU92TzdPd084TzdPdk93TzhPeE85TzhPd094TzlPeU86TzlPeE95TzpPek87TzpPeU96TztPe088TztPek97TzxPfE89TzxPe098Tz1PfU8+Tz1PfE99Tz5Pfk8/Tz5PfU9+Tz9Pf09ATz9Pfk9/T0BPgE9BT0BPf0+AT0FPgU9CT0FPgE+BT0JPgk9DT0JPgU+CT0NPg09ET0NPgk+DT0RPhE9FT0RPg0+ET0VP+w66DkVPhE/7DoURhU9GT4URRBGFT0ZPhk9HT0ZPhU+GT0dPh09IT0dPhk+HT0hPiE9JT0hPh0+IT0lPiU9KT0lPiE+JT0pPik9LT0pPiU+KT0tPi09MT0tPik+LT0xPjE9NT0xPi0+MT01PjU9OT01PjE+NT05Pjk9PT05PjU+OT09Pj09QT09Pjk+PT1BPkE9RT1BPj0+QT1FPkU9ST1FPkE+RT1JPkk9TT1JPkU+ST1NPk09UT1NPkk+TT1RPlE9VT1RPk0+UT1VPlU9WT1VPlE+VT1ZPlk9XT1ZPlU+WT1dPl09YT1dPlk+XT1hPmE9ZT1hPl0+YT1lPmU9aT1lPmE+ZT1pPmk9bT1pPmU+aT1tPm09cT1tPmk+bT1xPnE9dT1xPm0+cT11PnU9eT11PnE+dT15Pnk9fT15PnU+eT19Pn09gT19Pnk+fT2BPoE9hT2BPn0+gT2FPoU9iT2FPoE+hT2JPok9jT2JPoU+iT2NPo09kT2NPok+jT2RPpE9lT2RPo0+kT2VPpU9mT2VPpE+lT2ZPpk9nT2ZPpU+mT2dPp09oT2dPpk+nT2hPqE9pT2hPp0+oT2lPqU9qT2lPqE+pT2pPqk9rT2pPqU+qT2tPq09sT2tPqk+rT2xPrE9tT2xPq0+sT21PrU9uT21PrE+tT25Prk9vT25PrU+uT29Pr09wT29Prk+vT3BPsE9xT3BPr0+wT3FPsU9yT3FPsE+xT3JPsk9zT3JPsU+yT3NPs090T3NPsk+zT3RPtE91T3RPs0+0T3VPtU92T3VPtE+1T3ZPtk93T3ZPtU+2T3dPt094T3dPtk+3T3hPuE95T3hPt0+4T3lPuU96T3lPuE+5T3pPuk97T3pPuU+6T3tPu098T3tPuk+7T3xPvE99T3xPu0+8T31PvU9+T31PvE+9T35Pvk9/T35PvU++T39Pv0+AT39Pvk+/T4BPwE+BT4BPv0/AT4FPwU+CT4FPwE/BT4JPwk+DT4JPwU/CT4NPw0+ET4NPwk/DT4RPPA/7DoRPw088D0QRxE+FT0QRAxHET4VPxU+GT4VPxE/FT4ZPxk+HT4ZPxU/GT4dPx0+IT4dPxk/HT4hPyE+JT4hPx0/IT4lPyU+KT4lPyE/JT4pPyk+LT4pPyU/KT4tPy0+MT4tPyk/LT4xPzE+NT4xPy0/MT41PzU+OT41PzE/NT45Pzk+PT45PzU/OT49Pz0+QT49Pzk/PT5BP0E+RT5BPz0/QT5FP0U+ST5FP0E/RT5JP0k+TT5JP0U/ST5NP00+UT5NP0k/TT5RP1E+VT5RP00/UT5VP1U+WT5VP1E/VT5ZP1k+XT5ZP1U/WT5dP10+YT5dP1k/XT5hP2E+ZT5hP10/YT5lP2U+aT5lP2E/ZT5pP2k+bT5pP2U/aT5tP20+cT5tP2k/bT5xP3E+dT5xP20/cT51P3U+eT51P3E/dT55P3k+fT55P3U/eT59P30+gT59P3k/fT6BP4E+hT6BP30/gT6FP4U+iT6FP4E/hT6JP4k+jT6JP4U/iT6NP40+kT6NP4k/jT6RP5E+lT6RP40/kT6VP5U+mT6VP5E/lT6ZP5k+nT6ZP5U/mT6dP50+oT6dP5k/nT6hP6E+pT6hP50/oT6lP6U+qT6lP6E/pT6pP6k+rT6pP6U/qT6tP60+sT6tP6k/rT6xP7E+tT6xP60/sT61P7U+uT61P7E/tT65P7k+vT65P7U/uT69P70+wT69P7k/vT7BP8E+xT7BP70/wT7FP8U+yT7FP8E/xT7JP8k+zT7JP8U/yT7NP80+0T7NP8k/zT7RP9E+1T7RP80/0T7VP9U+2T7VP9E/1T7ZP9k+3T7ZP9U/2T7dP90+4T7dP9k/3T7hP+E+5T7hP90/4T7lP+U+6T7lP+E/5T7pP+k+7T7pP+U/6T7tP+0+8T7tP+k/7T7xP/E+9T7xP+0/8T71P/U++T71P/E/9T75P/k+/T75P/U/+T79P/0/AT79P/k//T8BPAFDBT8BP/08AUMFPAVDCT8FPAFABUMJPAlDDT8JPAVACUMNPfQ88D8NPAlB9DwMRA1DETwMRwhADUMRPBFDFT8RPA1AEUMVPBVDGT8VPBFAFUMZPBlDHT8ZPBVAGUMdPB1DIT8dPBlAHUMhPCFDJT8hPB1AIUMlPCVDKT8lPCFAJUMpPClDLT8pPCVAKUMtPC1DMT8tPClALUMxPDFDNT8xPC1AMUM1PDVDOT81PDFANUM5PDlDPT85PDVAOUM9PD1DQT89PDlAPUNBPEFDRT9BPD1AQUNFPEVDST9FPEFARUNJPElDTT9JPEVASUNNPE1DUT9NPElATUNRPFFDVT9RPE1AUUNVPFVDWT9VPFFAVUNZPFlDXT9ZPFVAWUNdPF1DYT9dPFlAXUNhPGFDZT9hPF1AYUNlPGVDaT9lPGFAZUNpPGlDbT9pPGVAaUNtPG1DcT9tPGlAbUNxPHFDdT9xPG1AcUN1PHVDeT91PHFAdUN5PHlDfT95PHVAeUN9PH1DgT99PHlAfUOBPIFDhT+BPH1AgUOFPIVDiT+FPIFAhUOJPIlDjT+JPIVAiUONPI1DkT+NPIlAjUORPJFDlT+RPI1AkUOVPJVDmT+VPJFAlUOZPJlDnT+ZPJVAmUOdPJ1DoT+dPJlAnUOhPKFDpT+hPJ1AoUOlPKVDqT+lPKFApUOpPKlDrT+pPKVAqUOtPK1DsT+tPKlArUOxPLFDtT+xPK1AsUO1PLVDuT+1PLFAtUO5PLlDvT+5PLVAuUO9PL1DwT+9PLlAvUPBPMFDxT/BPL1AwUPFPMVDyT/FPMFAxUPJPMlDzT/JPMVAyUPNPM1D0T/NPMlAzUPRPNFD1T/RPM1A0UPVPNVD2T/VPNFA1UPZPNlD3T/ZPNVA2UPdPN1D4T/dPNlA3UPhPOFD5T/hPN1A4UPlPOVD6T/lPOFA5UPpPOlD7T/pPOVA6UPtPO1D8T/tPOlA7UPxPPFD9T/xPO1A8UP1PPVD+T/1PPFA9UP5PPlD/T/5PPVA+UP9PP1AAUP9PPlA/UABQQFABUABQP1BAUAFQQVACUAFQQFBBUAJQvg99DwJQQVC+D8IQQlADUMIQgRBCUANQQ1AEUANQQlBDUARQRFAFUARQQ1BEUAVQRVAGUAVQRFBFUAZQRlAHUAZQRVBGUAdQR1AIUAdQRlBHUAhQSFAJUAhQR1BIUAlQSVAKUAlQSFBJUApQSlALUApQSVBKUAtQS1AMUAtQSlBLUAxQTFANUAxQS1BMUA1QTVAOUA1QTFBNUA5QTlAPUA5QTVBOUA9QT1AQUA9QTlBPUBBQUFARUBBQT1BQUBFQUVASUBFQUFBRUBJQUlATUBJQUVBSUBNQU1AUUBNQUlBTUBRQVFAVUBRQU1BUUBVQVVAWUBVQVFBVUBZQVlAXUBZQVVBWUBdQV1AYUBdQVlBXUBhQWFAZUBhQV1BYUBlQWVAaUBlQWFBZUBpQWlAbUBpQWVBaUBtQW1AcUBtQWlBbUBxQXFAdUBxQW1BcUB1QXVAeUB1QXFBdUB5QXlAfUB5QXVBeUB9QX1AgUB9QXlBfUCBQYFAhUCBQX1BgUCFQYVAiUCFQYFBhUCJQYlAjUCJQYVBiUCNQY1AkUCNQYlBjUCRQZFAlUCRQY1BkUCVQZVAmUCVQZFBlUCZQZlAnUCZQZVBmUCdQZ1AoUCdQZlBnUChQaFApUChQZ1BoUClQaVAqUClQaFBpUCpQalArUCpQaVBqUCtQa1AsUCtQalBrUCxQbFAtUCxQa1BsUC1QbVAuUC1QbFBtUC5QblAvUC5QbVBuUC9Qb1AwUC9QblBvUDBQcFAxUDBQb1BwUDFQcVAyUDFQ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xFDFUIZQxlCHUIZQxVDGUIdQx1CIUIdQxlDHUIhQyFCJUIhQx1DIUIlQyVCKUIlQyFDJUIpQylCLUIpQyVDKUItQy1CMUItQylDLUIxQzFCNUIxQy1DMUI1QzVCOUI1QzFDNUI5QzlCPUI5QzVDOUI9Qz1CQUI9QzlDPUJBQ0FCRUJBQz1DQUJFQ0VCSUJFQ0FDRUJJQ0lCTUJJQ0VDSUJNQ01CUUJNQ0lDTUJRQ1FCVUJRQ01DUUJVQ1VCWUJVQ1FDVUJZQ1lCXUJZQ1VDWUJdQ11CYUJdQ1lDXUJhQ2FCZUJhQ11DYUJlQ2VCaUJlQ2FDZUJpQ2lCbUJpQ2VDaUJtQ21CcUJtQ2lDbUJxQ3FCdUJxQ21DcUJ1Q3VCeUJ1Q3FDdUJ5Q3lCfUJ5Q3VDeUJ9Q31CgUJ9Q3lDfUKBQ4FChUKBQ31DgUKFQ4VCiUKFQ4FDhUKJQ4lCjUKJQ4VDiUKNQ41CkUKNQ4lDjUKRQ5FClUKRQ41DkUKVQ5VCmUKVQ5FDlUKZQ5lCnUKZQ5VDmUKdQ51CoUKdQ5lDnUKhQ6FCpUKhQ51DoUKlQ6VCqUKlQ6FDpUKpQ6lCrUKpQ6VDqUKtQ61CsUKtQ6lDrUKxQ7FCtUKxQ61DsUK1Q7VCuUK1Q7FDtUK5Q7lCvUK5Q7VDuUK9Q71CwUK9Q7lDvULBQ8FCxULBQ71DwULFQ8VCyULFQ8FDxULJQ8lCzULJQ8VDyULNQ81C0ULNQ8lDzULRQ9FC1ULRQ81D0ULVQ9VC2ULVQ9FD1ULZQ9lC3ULZQ9VD2ULdQ91C4ULdQ9lD3ULhQ+FC5ULhQ91D4ULlQ+VC6ULlQ+FD5ULpQ+lC7ULpQ+VD6ULtQ+1C8ULtQ+lD7ULxQ/FC9ULxQ+1D8UL1Q/VC+UL1Q/FD9UL5Q/lC/UL5Q/VD+UL9QPiB/IL9Q/lA+IMIA/1DAUMIAAwH/UMBQAFHBUMBQ/1AAUcFQAVHCUMFQAFEBUcJQAlHDUMJQAVECUcNQA1HEUMNQAlEDUcRQBFHFUMRQA1EEUcVQBVHGUMVQBFEFUcZQBlHHUMZQBVEGUcdQB1HIUMdQBlEHUchQCFHJUMhQB1EIUclQCVHKUMlQCFEJUcpQClHLUMpQCVEKUctQC1HMUMtQClELUcxQDFHNUMxQC1EMUc1QDVHOUM1QDFENUc5QDlHPUM5QDVEOUc9QD1HQUM9QDlEPUdBQEFHRUNBQD1EQUdFQEVHSUNFQEFERUdJQElHTUNJQEVESUdNQE1HUUNNQElETUdRQFFHVUNRQE1EUUdVQFVHWUNVQFFEVUdZQFlHXUNZQFVEWUddQF1HYUNdQFlEXUdhQGFHZUNhQF1EYUdlQGVHaUNlQGFEZUdpQGlHbUNpQGVEaUdtQG1HcUNtQGlEbUdxQHFHdUNxQG1EcUd1QHVHeUN1QHFEdUd5QHlHfUN5QHVEeUd9QH1HgUN9QHlEfUeBQIFHhUOBQH1EgUeFQIVHiUOFQIFEhUeJQIlHjUOJQIVEiUeNQI1HkUONQIlEjUeRQJFHlUORQI1EkUeVQJVHmUOVQJFElUeZQJlHnUOZQJVEmUedQJ1HoUOdQJlEnUehQKFHpUOhQJ1EoUelQKVHqUOlQKFEpUepQKlHrUOpQKVEqUetQK1HsUOtQKlErUexQLFHtUOxQK1EsUe1QLVHuUO1QLFEtUe5QLlHvUO5QLVEuUe9QL1HwUO9QLlEvUfBQMFHxUPBQL1EwUfFQMVHyUPFQMFExUfJQMlHzUPJQMVEyUfNQM1H0UPNQMlEzUfRQNFH1UPRQM1E0UfVQNVH2UPVQNFE1UfZQNlH3UPZQNVE2UfdQN1H4UPdQNlE3UfhQOFH5UPhQN1E4UflQOVH6UPlQOFE5UfpQOlH7UPpQOVE6UftQO1H8UPtQOlE7UfxQPFH9UPxQO1E8Uf1QPVH+UP1QPFE9Uf5Q/R8+IP5QPVH9HwMBPlH/UAMBRAE+Uf9QP1EAUf9QPlE/UQBRQFEBUQBRP1FAUQFRQVECUQFRQFFBUQJRQlEDUQJRQVFCUQNRQ1EEUQNRQlFDUQRRRFEFUQRRQ1FEUQVRRVEGUQVRRFFFUQZRRlEHUQZRRVFGUQdRR1EIUQdRRlFHUQhRSFEJUQhRR1FIUQlRSVEKUQlRSFFJUQpRSlELUQpRSVFKUQtRS1EMUQtRSlFLUQxRTFENUQxRS1FMUQ1RTVEOUQ1RTFFNUQ5RTlEPUQ5RTVFOUQ9RT1EQUQ9RTlFPURBRUFERURBRT1FQURFRUVESURFRUFFRURJRUlETURJRUVFSURNRU1EUURNRUlFTURRRVFEVURRRU1FUURVRVVEWURVRVFFVURZRVlEXURZRVVFWURdRV1EYURdRVlFXURhRWFEZURhRV1FYURlRWVEaURlRWFFZURpRWlEbURpRWVFaURtRW1EcURtRWlFbURxRXFEdURxRW1FcUR1RXVEeUR1RXFFdUR5RXlEfUR5RXVFeUR9RX1EgUR9RXlFfUSBRYFEhUSBRX1FgUSFRYVEiUSFRYFFhUSJRYlEjUSJRYVFiUSNRY1EkUSNRYlFjUSRRZFElUSRRY1FkUSVRZVEmUSVRZFFlUSZRZlEnUSZRZVFmUSdRZ1EoUSdRZlFnUShRaFEpUShRZ1FoUSlRaVEqUSlRaFFpUSpRalErUSpRaVFqUStRa1EsUStRalFrUSxRbFEtUSxRa1FsUS1RbVEuUS1RbFFtUS5RblEvUS5RbVFuUS9Rb1EwUS9RblFvUTBRcFExUTBRb1FwUTFRcVEyUTFRcFFxUTJRclEzUTJRcVFyUTNRc1E0UTNRclFzUTRRdFE1UTRRc1F0UTVRdVE2UTVRdFF1UTZRdlE3UTZRdVF2UTdRd1E4UTdRdlF3UThReFE5UThRd1F4UTlReVE6UTlReFF5UTpRelE7UTpReVF6UTtRe1E8UTtRelF7UTxRfFE9UTxRe1F8UT1RvB/9Hz1RfFG8H0QBfVE+UUQBhQF9UT5RflE/UT5RfVF+UT9Rf1FAUT9RflF/UUBRgFFBUUBRf1GAUUFRgVFCUUFRgFGBUUJRglFDUUJRgVGCUUNRg1FEUUNRglGDUURRhFFFUURRg1GEUUVRhVFGUUVRhFGFUUZRhlFHUUZRhVGGUUdRh1FIUUdRhlGHUUhRiFFJUUhRh1GIUUlRiVFKUUlRiFGJUUpRilFLUUpRiVGKUUtRi1FMUUtRilGLUUxRjFFNUUxRi1GMUU1RjVFOUU1RjFGNUU5RjlFPUU5RjVGOUU9Rj1FQUU9RjlGPUVBRkFFRUVBRj1GQUVFRkVFSUVFRkFGRUVJRklFTUVJRkVGSUVNRk1FUUVNRklGTUVRRlFFVUVRRk1GUUVVRlVFWUVVRlFGVUVZRllFXUVZRlVGWUVdRl1FYUVdRllGXUVhRmFFZUVhRl1GYUVlRmVFaUVlRmFGZUVpRmlFbUVpRmVGaUVtRm1FcUVtRmlGbUVxRnFFdUVxRm1GcUV1RnVFeUV1RnFGdUV5RnlFfUV5RnVGeUV9Rn1FgUV9RnlGfUWBRoFFhUWBRn1GgUWFRoVFiUWFRoFGhUWJRolFjUWJRoVGiUWNRo1FkUWNRolGjUWRRpFFlUWRRo1GkUWVRpVFmUWVRpFGlUWZRplFnUWZRpVGmUWdRp1FoUWdRplGnUWhRqFFpUWhRp1GoUWlRqVFqUWlRqFGpUWpRqlFrUWpRqVGqUWtRq1FsUWtRqlGrUWxRrFFtUWxRq1GsUW1RrVFuUW1RrFGtUW5RrlFvUW5RrVGuUW9Rr1FwUW9RrlGvUXBRsFFxUXBRr1GwUXFRsVFyUXFRsFGxUXJRslFzUXJRsVGyUXNRs1F0UXNRslGzUXRRtFF1UXRRs1G0UXVRtVF2UXVRtFG1UXZRtlF3UXZRtVG2UXdRt1F4UXdRtlG3UXhRuFF5UXhRt1G4UXlRuVF6UXlRuFG5UXpRulF7UXpRuVG6UXtRu1F8UXtRulG7UXxRex+8H3xRu1F7H4UBvFF9UYUBxgG8UX1RvVF+UX1RvFG9UX5RvlF/UX5RvVG+UX9Rv1GAUX9RvlG/UYBRwFGBUYBRv1HAUYFRwVGCUYFRwFHBUYJRwlGDUYJRwVHCUYNRw1GEUYNRwlHDUYRRxFGFUYRRw1HEUYVRxVGGUYVRxFHFUYZRxlGHUYZRxVHGUYdRx1GIUYdRxlHHUYhRyFGJUYhRx1HIUYlRyVGKUYlRyFHJUYpRylGLUYpRyVHKUYtRy1GMUYtRylHLUYxRzFGNUYxRy1HMUY1RzVGOUY1RzFHNUY5RzlGPUY5RzVHOUY9Rz1GQUY9RzlHPUZBR0FGRUZBRz1HQUZFR0VGSUZFR0FHRUZJR0lGTUZJR0VHSUZNR01GUUZNR0lHTUZRR1FGVUZRR01HUUZVR1VGWUZVR1FHVUZZR1lGXUZZR1VHWUZdR11GYUZdR1lHXUZhR2FGZUZhR11HYUZlR2VGaUZlR2FHZUZpR2lGbUZpR2VHaUZtR21GcUZtR2lHbUZxR3FGdUZxR21HcUZ1R3VGeUZ1R3FHdUZ5R3lGfUZ5R3VHeUZ9R31GgUZ9R3lHfUaBR4FGhUaBR31HgUaFR4VGiUaFR4FHhUaJR4lGjUaJR4VHiUaNR41GkUaNR4lHjUaRR5FGlUaRR41HkUaVR5VGmUaVR5FHlUaZR5lGnUaZR5VHmUadR51GoUadR5lHnUahR6FGpUahR51HoUalR6VGqUalR6FHpUapR6lGrUapR6VHqUatR61GsUatR6lHrUaxR7FGtUaxR61HsUa1R7VGuUa1R7FHtUa5R7lGvUa5R7VHuUa9R71GwUa9R7lHvUbBR8FGxUbBR71HwUbFR8VGyUbFR8FHxUbJR8lGzUbJR8VHyUbNR81G0UbNR8lHzUbRR9FG1UbRR81H0UbVR9VG2UbVR9FH1UbZR9lG3UbZR9VH2UbdR91G4UbdR9lH3UbhR+FG5UbhR91H4UblR+VG6UblR+FH5UbpR+lG7UbpR+VH6UbtROh97H7tR+lE6H8YB+1G8UcYBBwL7UbxR/FG9UbxR+1H8Ub1R/VG+Ub1R/FH9Ub5R/lG/Ub5R/VH+Ub9R/1HAUb9R/lH/UcBRAFLBUcBR/1EAUsFRAVLCUcFRAFIBUsJRAlLDUcJRAVICUsNRA1LEUcNRAlIDUsRRBFLFUcRRA1IEUsVRBVLGUcVRBFIFUsZRBlLHUcZRBVIGUsdRB1LIUcdRBlIHUshRCFLJUchRB1IIUslRCVLKUclRCFIJUspRClLLUcpRCVIKUstRC1LMUctRClILUsxRDFLNUcxRC1IMUs1RDVLOUc1RDFINUs5RDlLPUc5RDVIOUs9RD1LQUc9RDlIPUtBREFLRUdBRD1IQUtFREVLSUdFREFIRUtJRElLTUdJREVISUtNRE1LUUdNRElITUtRRFFLVUdRRE1IUUtVRFVLWUdVRFFIVUtZRFlLXUdZRFVIWUtdRF1LYUddRFlIXUthRGFLZUdhRF1IYUtlRGVLaUdlRGFIZUtpRGlLbUdpRGVIaUttRG1LcUdtRGlIbUtxRHFLdUdxRG1IcUt1RHVLeUd1RHFIdUt5RHlLfUd5RHVIeUt9RH1LgUd9RHlIfUuBRIFLhUeBRH1IgUuFRIVLiUeFRIFIhUuJRIlLjUeJRIVIiUuNRI1LkUeNRIlIjUuRRJFLlUeRRI1IkUuVRJVLmUeVRJFIlUuZRJlLnUeZRJVImUudRJ1LoUedRJlInUuhRKFLpUehRJ1IoUulRKVLqUelRKFIpUupRKlLrUepRKVIqUutRK1LsUetRKlIrUuxRLFLtUexRK1IsUu1RLVLuUe1RLFItUu5RLlLvUe5RLVIuUu9RL1LwUe9RLlIvUvBRMFLxUfBRL1IwUvFRMVLyUfFRMFIxUvJRMlLzUfJRMVIyUvNRM1L0UfNRMlIzUvRRNFL1UfRRM1I0UvVRNVL2UfVRNFI1UvZRNlL3UfZRNVI2UvdRN1L4UfdRNlI3UvhROFL5UfhRN1I4UvlROVL6UflROFI5UvpR+R46H/pROVL5HgcCOlL7UQcCSAI6UvtRO1L8UftROlI7UvxRPFL9UfxRO1I8Uv1RPVL+Uf1RPFI9Uv5RPlL/Uf5RPVI+Uv9RP1IAUv9RPlI/UgBSQFIBUgBSP1JAUgFSQVICUgFSQFJBUgJSQlIDUgJSQVJCUgNSQ1IEUgNSQlJDUgRSRFIFUgRSQ1JEUgVSRVIGUgVSRFJFUgZSRlIHUgZSRVJGUgdSR1IIUgdSRlJHUghSSFIJUghSR1JIUglSSVIKUglSSFJJUgpSSlILUgpSSVJKUgtSS1IMUgtSSlJLUgxSTFINUgxSS1JMUg1STVIOUg1STFJNUg5STlIPUg5STVJOUg9ST1IQUg9STlJPUhBSUFIRUhBST1JQUhFSUVISUhFSUFJRUhJSUlITUhJSUVJSUhNSU1IUUhNSUlJTUhRSVFIVUhRSU1JUUhVSVVIWUhVSVFJVUhZSVlIXUhZSVVJWUhdSV1IYUhdSVlJXUhhSWFIZUhhSV1JYUhlSWVIaUhlSWFJZUhpSWlIbUhpSWVJaUhtSW1IcUhtSWlJbUhxSXFIdUhxSW1JcUh1SXVIeUh1SXFJdUh5SXlIfUh5SXVJeUh9SX1IgUh9SXlJfUiBSYFIhUiBSX1JgUiFSYVIiUiFSYFJhUiJSYlIjUiJSYVJiUiNSY1IkUiNSYlJjUiRSZFIlUiRSY1JkUiVSZVImUiVSZFJlUiZSZlInUiZSZVJmUidSZ1IoUidSZlJnUihSaFIpUihSZ1JoUilSaVIqUilSaFJpUipSalIrUipSaVJqUitSa1IsUitSalJrUixSbFItUixSa1JsUi1SbVIuUi1SbFJtUi5SblIvUi5SbVJuUi9Sb1IwUi9SblJvUjBScFIxUjBSb1JwUjFScVIyUjFScFJxUjJSclIzUjJScVJyUjNSc1I0UjNSclJzUjRSdFI1UjRSc1J0UjVSdVI2UjVSdFJ1UjZSdlI3UjZSdVJ2UjdSd1I4UjdSdlJ3UjhSeFI5UjhSd1J4UjlSuB75HjlSeFK4HkgCeVI6UkgCiQJ5UjpSelI7UjpSeVJ6UjtSe1I8UjtSelJ7UjxSfFI9UjxSe1J8Uj1SfVI+Uj1SfFJ9Uj5SflI/Uj5SfVJ+Uj9Sf1JAUj9SflJ/UkBSgFJBUkBSf1KAUkFSgVJCUkFSgFKBUkJSglJDUkJSgVKCUkNSg1JEUkNSglKDUkRShFJFUkRSg1KEUkVShVJGUkVShFKFUkZShlJHUkZShVKGUkdSh1JIUkdShlKHUkhSiFJJUkhSh1KIUklSiVJKUklSiFKJUkpSilJLUkpSiVKKUktSi1JMUktSilKLUkxSjFJNUkxSi1KMUk1SjVJOUk1SjFKNUk5SjlJPUk5SjVKOUk9Sj1JQUk9SjlKPUlBSkFJRUlBSj1KQUlFSkVJSUlFSkFKRUlJSklJTUlJSkVKSUlNSk1JUUlNSklKTUlRSlFJVUlRSk1KUUlVSlVJWUlVSlFKVUlZSllJXUlZSlVKWUldSl1JYUldSllKXUlhSmFJZUlhSl1KYUllSmVJaUllSmFKZUlpSmlJbUlpSmVKaUltSm1JcUltSmlKbUlxSnFJdUlxSm1KcUl1SnVJeUl1SnFKdUl5SnlJfUl5SnVKeUl9Sn1JgUl9SnlKfUmBSoFJhUmBSn1KgUmFSoVJiUmFSoFKhUmJSolJjUmJSoVKiUmNSo1JkUmNSolKjUmRSpFJlUmRSo1KkUmVSpVJmUmVSpFKlUmZSplJnUmZSpVKmUmdSp1JoUmdSplKnUmhSqFJpUmhSp1KoUmlSqVJqUmlSqFKpUmpSqlJrUmpSqVKqUmtSq1JsUmtSqlKrUmxSrFJtUmxSq1KsUm1SrVJuUm1SrFKtUm5SrlJvUm5SrVKuUm9Sr1JwUm9SrlKvUnBSsFJxUnBSr1KwUnFSsVJyUnFSsFKxUnJSslJzUnJSsVKyUnNSs1J0UnNSslKzUnRStFJ1UnRSs1K0UnVStVJ2UnVStFK1UnZStlJ3UnZStVK2UndSt1J4UndStlK3UnhSdx64HnhSt1J3HokCuFJ5UokCygK4UnlSuVJ6UnlSuFK5UnpSulJ7UnpSuVK6UntSu1J8UntSulK7UnxSvFJ9UnxSu1K8Un1SvVJ+Un1SvFK9Un5SvlJ/Un5SvVK+Un9Sv1KAUn9SvlK/UoBSwFKBUoBSv1LAUoFSwVKCUoFSwFLBUoJSwlKDUoJSwVLCUoNSw1KEUoNSwlLDUoRSxFKFUoRSw1LEUoVSxVKGUoVSxFLFUoZSxlKHUoZSxVLGUodSx1KIUodSxlLHUohSyFKJUohSx1LIUolSyVKKUolSyFLJUopSylKLUopSyVLKUotSy1KMUotSylLLUoxSzFKNUoxSy1LMUo1SzVKOUo1SzFLNUo5SzlKPUo5SzVLOUo9Sz1KQUo9SzlLPUpBS0FKRUpBSz1LQUpFS0VKSUpFS0FLRUpJS0lKTUpJS0VLSUpNS01KUUpNS0lLTUpRS1FKVUpRS01LUUpVS1VKWUpVS1FLVUpZS1lKXUpZS1VLWUpdS11KYUpdS1lLXUphS2FKZUphS11LYUplS2VKaUplS2FLZUppS2lKbUppS2VLaUptS21KcUptS2lLbUpxS3FKdUpxS21LcUp1S3VKeUp1S3FLdUp5S3lKfUp5S3VLeUp9S31KgUp9S3lLfUqBS4FKhUqBS31LgUqFS4VKiUqFS4FLhUqJS4lKjUqJS4VLiUqNS41KkUqNS4lLjUqRS5FKlUqRS41LkUqVS5VKmUqVS5FLlUqZS5lKnUqZS5VLmUqdS51KoUqdS5lLnUqhS6FKpUqhS51LoUqlS6VKqUqlS6FLpUqpS6lKrUqpS6VLqUqtS61KsUqtS6lLrUqxS7FKtUqxS61LsUq1S7VKuUq1S7FLtUq5S7lKvUq5S7VLuUq9S71KwUq9S7lLvUrBS8FKxUrBS71LwUrFS8VKyUrFS8FLxUrJS8lKzUrJS8VLyUrNS81K0UrNS8lLzUrRS9FK1UrRS81L0UrVS9VK2UrVS9FL1UrZS9lK3UrZS9VL2UrdSNh53HrdS9lI2HsoC91K4UsoCCwP3UrhS+FK5UrhS91L4UrlS+VK6UrlS+FL5UrpS+lK7UrpS+VL6UrtS+1K8UrtS+lL7UrxS/FK9UrxS+1L8Ur1S/VK+Ur1S/FL9Ur5S/lK/Ur5S/VL+Ur9S/1LAUr9S/lL/UsBSAFPBUsBS/1IAU8FSAVPCUsFSAFMBU8JSAlPDUsJSAVMCU8NSA1PEUsNSAlMDU8RSBFPFUsRSA1MEU8VSBVPGUsVSBFMFU8ZSBlPHUsZSBVMGU8dSB1PIUsdSBlMHU8hSCFPJUshSB1MIU8lSCVPKUslSCFMJU8pSClPLUspSCVMKU8tSC1PMUstSClMLU8xSDFPNUsxSC1MMU81SDVPOUs1SDFMNU85SDlPPUs5SDVMOU89SD1PQUs9SDlMPU9BSEFPRUtBSD1MQU9FSEVPSUtFSEFMRU9JSElPTUtJSEVMSU9NSE1PUUtNSElMTU9RSFFPVUtRSE1MUU9VSFVPWUtVSFFMVU9ZSFlPXUtZSFVMWU9dSF1PYUtdSFlMXU9hSGFPZUthSF1MYU9lSGVPaUtlSGFMZU9pSGlPbUtpSGVMaU9tSG1PcUttSGlMbU9xSHFPdUtxSG1McU91SHVPeUt1SHFMdU95SHlPfUt5SHVMeU99SH1PgUt9SHlMfU+BSIFPhUuBSH1MgU+FSIVPiUuFSIFMhU+JSIlPjUuJSIVMiU+NSI1PkUuNSIlMjU+RSJFPlUuRSI1MkU+VSJVPmUuVSJFMlU+ZSJlPnUuZSJVMmU+dSJ1PoUudSJlMnU+hSKFPpUuhSJ1MoU+lSKVPqUulSKFMpU+pSKlPrUupSKVMqU+tSK1PsUutSKlMrU+xSLFPtUuxSK1MsU+1SLVPuUu1SLFMtU+5SLlPvUu5SLVMuU+9SL1PwUu9SLlMvU/BSMFPxUvBSL1MwU/FSMVPyUvFSMFMxU/JSMlPzUvJSMVMyU/NSM1P0UvNSMlMzU/RSNFP1UvRSM1M0U/VSNVP2UvVSNFM1U/ZS9R02HvZSNVP1HQsDNlP3UgsDTAM2U/dSN1P4UvdSNlM3U/hSOFP5UvhSN1M4U/lSOVP6UvlSOFM5U/pSOlP7UvpSOVM6U/tSO1P8UvtSOlM7U/xSPFP9UvxSO1M8U/1SPVP+Uv1SPFM9U/5SPlP/Uv5SPVM+U/9SP1MAU/9SPlM/UwBTQFMBUwBTP1NAUwFTQVMCUwFTQFNBUwJTQlMDUwJTQVNCUwNTQ1MEUwNTQlNDUwRTRFMFUwRTQ1NEUwVTRVMGUwVTRFNFUwZTRlMHUwZTRVNGUwdTR1MIUwdTRlNHUwhTSFMJUwhTR1NIUwlTSVMKUwlTSFNJUwpTSlMLUwpTSVNKUwtTS1MMUwtTSlNLUwxTTFMNUwxTS1NMUw1TTVMOUw1TTFNNUw5TTlMPUw5TTVNOUw9TT1MQUw9TTlNPUxBTUFMRUxBTT1NQUxFTUVMSUxFTUFNRUxJTUlMTUxJTUVNSUxNTU1MUUxNTUlNTUxRTVFMVUxRTU1NUUxVTVVMWUxVTVFNVUxZTVlMXUxZTVVNWUxdTV1MYUxdTVlNXUxhTWFMZUxhTV1NYUxlTWVMaUxlTWFNZUxpTWlMbUxpTWVNaUxtTW1McUxtTWlNbUxxTXFMdUxxTW1NcUx1TXVMeUx1TXFNdUx5TXlMfUx5TXVNeUx9TX1MgUx9TXlNfUyBTYFMhUyBTX1NgUyFTYVMiUyFTYFNhUyJTYlMjUyJTYVNiUyNTY1MkUyNTYlNjUyRTZFMlUyRTY1NkUyVTZVMmUyVTZFNlUyZTZlMnUyZTZVNmUydTZ1MoUydTZlNnUyhTaFMpUyhTZ1NoUylTaVMqUylTaFNpUypTalMrUypTaVNqUytTa1MsUytTalNrUyxTbFMtUyxTa1NsUy1TbVMuUy1TbFNtUy5TblMvUy5TbVNuUy9Tb1MwUy9TblNvUzBTcFMxUzBTb1NwUzFTcVMyUzFTcFNxUzJTclMzUzJTcVNyUzNTc1M0UzNTclNzUzRTdFM1UzRTc1N0UzVTtB31HTVTdFO0HUwDdVM2U0wDjQN1UzZTdlM3UzZTdVN2UzdTd1M4UzdTdlN3UzhTeFM5UzhTd1N4UzlTeVM6UzlTeFN5UzpTelM7UzpTeVN6UztTe1M8UztTelN7UzxTfFM9UzxTe1N8Uz1TfVM+Uz1TfFN9Uz5TflM/Uz5TfVN+Uz9Tf1NAUz9TflN/U0BTgFNBU0BTf1OAU0FTgVNCU0FTgFOBU0JTglNDU0JTgVOCU0NTg1NEU0NTglODU0RThFNFU0RTg1OEU0VThVNGU0VThFOFU0ZThlNHU0ZThVOGU0dTh1NIU0dThlOHU0hTiFNJU0hTh1OIU0lTiVNKU0lTiFOJU0pTilNLU0pTiVOKU0tTi1NMU0tTilOLU0xTjFNNU0xTi1OMU01TjVNOU01TjFONU05TjlNPU05TjVOOU09Tj1NQU09TjlOPU1BTkFNRU1BTj1OQU1FTkVNSU1FTkFORU1JTklNTU1JTkVOSU1NTk1NUU1NTklOTU1RTlFNVU1RTk1OUU1VTlVNWU1VTlFOVU1ZTllNXU1ZTlVOWU1dTl1NYU1dTllOXU1hTmFNZU1hTl1OYU1lTmVNaU1lTmFOZU1pTmlNbU1pTmVOaU1tTm1NcU1tTmlObU1xTnFNdU1xTm1OcU11TnVNeU11TnFOdU15TnlNfU15TnVOeU19Tn1NgU19TnlOfU2BToFNhU2BTn1OgU2FToVNiU2FToFOhU2JTolNjU2JToVOiU2NTo1NkU2NTolOjU2RTpFNlU2RTo1OkU2VTpVNmU2VTpFOlU2ZTplNnU2ZTpVOmU2dTp1NoU2dTplOnU2hTqFNpU2hTp1OoU2lTqVNqU2lTqFOpU2pTqlNrU2pTqVOqU2tTq1NsU2tTqlOrU2xTrFNtU2xTq1OsU21TrVNuU21TrFOtU25TrlNvU25TrVOuU29Tr1NwU29TrlOvU3BTsFNxU3BTr1OwU3FTsVNyU3FTsFOxU3JTslNzU3JTsVOyU3NTs1N0U3NTslOzU3RTcx20HXRTs1NzHY0DtFN1U40DzgO0U3VTtVN2U3VTtFO1U3ZTtlN3U3ZTtVO2U3dTt1N4U3dTtlO3U3hTuFN5U3hTt1O4U3lTuVN6U3lTuFO5U3pTulN7U3pTuVO6U3tTu1N8U3tTulO7U3xTvFN9U3xTu1O8U31TvVN+U31TvFO9U35TvlN/U35TvVO+U39Tv1OAU39TvlO/U4BTwFOBU4BTv1PAU4FTwVOCU4FTwFPBU4JTwlODU4JTwVPCU4NTw1OEU4NTwlPDU4RTxFOFU4RTw1PEU4VTxVOGU4VTxFPFU4ZTxlOHU4ZTxVPGU4dTx1OIU4dTxlPHU4hTyFOJU4hTx1PIU4lTyVOKU4lTyFPJU4pTylOLU4pTyVPKU4tTy1OMU4tTylPLU4xTzFONU4xTy1PMU41TzVOOU41TzFPNU45TzlOPU45TzVPOU49Tz1OQU49TzlPPU5BT0FORU5BTz1PQU5FT0VOSU5FT0FPRU5JT0lOTU5JT0VPSU5NT01OUU5NT0lPTU5RT1FOVU5RT01PUU5VT1VOWU5VT1FPVU5ZT1lOXU5ZT1VPWU5dT11OYU5dT1lPXU5hT2FOZU5hT11PYU5lT2VOaU5lT2FPZU5pT2lObU5pT2VPaU5tT21OcU5tT2lPbU5xT3FOdU5xT21PcU51T3VOeU51T3FPdU55T3lOfU55T3VPeU59T31OgU59T3lPfU6BT4FOhU6BT31PgU6FT4VOiU6FT4FPhU6JT4lOjU6JT4VPiU6NT41OkU6NT4lPjU6RT5FOlU6RT41PkU6VT5VOmU6VT5FPlU6ZT5lOnU6ZT5VPmU6dT51OoU6dT5lPnU6hT6FOpU6hT51PoU6lT6VOqU6lT6FPpU6pT6lOrU6pT6VPqU6tT61OsU6tT6lPrU6xT7FOtU6xT61PsU61T7VOuU61T7FPtU65T7lOvU65T7VPuU69T71OwU69T7lPvU7BT8FOxU7BT71PwU7FT8VOyU7FT8FPxU7JT8lOzU7JT8VPyU7NTMh1zHbNT8lMyHc4D81O0U84DDwTzU7RT9FO1U7RT81P0U7VT9VO2U7VT9FP1U7ZT9lO3U7ZT9VP2U7dT91O4U7dT9lP3U7hT+FO5U7hT91P4U7lT+VO6U7lT+FP5U7pT+lO7U7pT+VP6U7tT+1O8U7tT+lP7U7xT/FO9U7xT+1P8U71T/VO+U71T/FP9U75T/lO/U75T/VP+U79T/1PAU79T/lP/U8BTAFTBU8BT/1MAVMFTAVTCU8FTAFQBVMJTAlTDU8JTAVQCVMNTA1TEU8NTAlQDVMRTBFTFU8RTA1QEVMVTBVTGU8VTBFQFVMZTBlTHU8ZTBVQGVMdTB1TIU8dTBlQHVMhTCFTJU8hTB1QIVMlTCVTKU8lTCFQJVMpTClTLU8pTCVQKVMtTC1TMU8tTClQLVMxTDFTNU8xTC1QMVM1TDVTOU81TDFQNVM5TDlTPU85TDVQOVM9TD1TQU89TDlQPVNBTEFTRU9BTD1QQVNFTEVTSU9FTEFQRVNJTElTTU9JTEVQSVNNTE1TUU9NTElQTVNRTFFTVU9RTE1QUVNVTFVTWU9VTFFQVVNZTFlTXU9ZTFVQWVNdTF1TYU9dTFlQXVNhTGFTZU9hTF1QYVNlTGVTaU9lTGFQZVNpTGlTbU9pTGVQaVNtTG1TcU9tTGlQbVNxTHFTdU9xTG1QcVN1THVTeU91THFQdVN5THlTfU95THVQeVN9TH1TgU99THlQfVOBTIFThU+BTH1QgVOFTIVTiU+FTIFQhVOJTIlTjU+JTIVQiVONTI1TkU+NTIlQjVORTJFTlU+RTI1QkVOVTJVTmU+VTJFQlVOZTJlTnU+ZTJVQmVOdTJ1ToU+dTJlQnVOhTKFTpU+hTJ1QoVOlTKVTqU+lTKFQpVOpTKlTrU+pTKVQqVOtTK1TsU+tTKlQrVOxTLFTtU+xTK1QsVO1TLVTuU+1TLFQtVO5TLlTvU+5TLVQuVO9TL1TwU+9TLlQvVPBTMFTxU/BTL1QwVPFTMVTyU/FTMFQxVPJT8RwyHfJTMVTxHA8EMlTzUw8EUAQyVPNTM1T0U/NTMlQzVPRTNFT1U/RTM1Q0VPVTNVT2U/VTNFQ1VPZTNlT3U/ZTNVQ2VPdTN1T4U/dTNlQ3VPhTOFT5U/hTN1Q4VPlTOVT6U/lTOFQ5VPpTOlT7U/pTOVQ6VPtTO1T8U/tTOlQ7VPxTPFT9U/xTO1Q8VP1TPVT+U/1TPFQ9VP5TPlT/U/5TPVQ+VP9TP1QAVP9TPlQ/VABUQFQBVABUP1RAVAFUQVQCVAFUQFRBVAJUQlQDVAJUQVRCVANUQ1QEVANUQlRDVARURFQFVARUQ1REVAVURVQGVAVURFRFVAZURlQHVAZURVRGVAdUR1QIVAdURlRHVAhUSFQJVAhUR1RIVAlUSVQKVAlUSFRJVApUSlQLVApUSVRKVAtUS1QMVAtUSlRLVAxUTFQNVAxUS1RMVA1UTVQOVA1UTFRNVA5UTlQPVA5UTVROVA9UT1QQVA9UTlRPVBBUUFQRVBBUT1RQVBFUUVQSVBFUUFRRVBJUUlQTVBJUUVRSVBNUU1QUVBNUUlRTVBRUVFQVVBRUU1RUVBVUVVQWVBVUVFRVVBZUVlQXVBZUVVRWVBdUV1QYVBdUVlRXVBhUWFQZVBhUV1RYVBlUWVQaVBlUWFRZVBpUWlQbVBpUWVRaVBtUW1QcVBtUWlRbVBxUXFQdVBxUW1RcVB1UXVQeVB1UXFRdVB5UXlQfVB5UXVReVB9UX1QgVB9UXlRfVCBUYFQhVCBUX1RgVCFUYVQiVCFUYFRhVCJUYlQjVCJUYVRiVCNUY1QkVCNUYlRjVCRUZFQlVCRUY1RkVCVUZVQmVCVUZFRlVCZUZlQnVCZUZVRmVCdUZ1QoVCdUZlRnVChUaFQpVChUZ1RoVClUaVQqVClUaFRpVCpUalQrVCpUaVRqVCtUa1QsVCtUalRrVCxUbFQtVCxUa1RsVC1UbVQuVC1UbFRtVC5UblQvVC5UbVRuVC9Ub1QwVC9UblRvVDBUcFQxVDBUb1RwVDFUsBzxHDFUcFSwHFAEcVQyVFAEkQRxVDJUclQzVDJUcVRyVDNUc1Q0VDNUclRzVDRUdFQ1VDRUc1R0VDVUdVQ2VDVUdFR1VDZUdlQ3VDZUdVR2VDdUd1Q4VDdUdlR3VDhUeFQ5VDhUd1R4VDlUeVQ6VDlUeFR5VDpUelQ7VDpUeVR6VDtUe1Q8VDtUelR7VDxUfFQ9VDxUe1R8VD1UfVQ+VD1UfFR9VD5UflQ/VD5UfVR+VD9Uf1RAVD9UflR/VEBUgFRBVEBUf1SAVEFUgVRCVEFUgFSBVEJUglRDVEJUgVSCVENUg1REVENUglSDVERUhFRFVERUg1SEVEVUhVRGVEVUhFSFVEZUhlRHVEZUhVSGVEdUh1RIVEdUhlSHVEhUiFRJVEhUh1SIVElUiVRKVElUiFSJVEpUilRLVEpUiVSKVEtUi1RMVEtUilSLVExUjFRNVExUi1SMVE1UjVROVE1UjFSNVE5UjlRPVE5UjVSOVE9Uj1RQVE9UjlSPVFBUkFRRVFBUj1SQVFFUkVRSVFFUkFSRVFJUklRTVFJUkVSSVFNUk1RUVFNUklSTVFRUlFRVVFRUk1SUVFVUlVRWVFVUlFSVVFZUllRXVFZUlVSWVFdUl1RYVFdUllSXVFhUmFRZVFhUl1SYVFlUmVRaVFlUmFSZVFpUmlRbVFpUmVSaVFtUm1RcVFtUmlSbVFxUnFRdVFxUm1ScVF1UnVReVF1UnFSdVF5UnlRfVF5UnVSeVF9Un1RgVF9UnlSfVGBUoFRhVGBUn1SgVGFUoVRiVGFUoFShVGJUolRjVGJUoVSiVGNUo1RkVGNUolSjVGRUpFRlVGRUo1SkVGVUpVRmVGVUpFSlVGZUplRnVGZUpVSmVGdUp1RoVGdUplSnVGhUqFRpVGhUp1SoVGlUqVRqVGlUqFSpVGpUqlRrVGpUqVSqVGtUq1RsVGtUqlSrVGxUrFRtVGxUq1SsVG1UrVRuVG1UrFStVG5UrlRvVG5UrVSuVG9Ur1RwVG9UrlSvVHBUbxywHHBUr1RvHJEEsFRxVJEE0gSwVHFUsVRyVHFUsFSxVHJUslRzVHJUsVSyVHNUs1R0VHNUslSzVHRUtFR1VHRUs1S0VHVUtVR2VHVUtFS1VHZUtlR3VHZUtVS2VHdUt1R4VHdUtlS3VHhUuFR5VHhUt1S4VHlUuVR6VHlUuFS5VHpUulR7VHpUuVS6VHtUu1R8VHtUulS7VHxUvFR9VHxUu1S8VH1UvVR+VH1UvFS9VH5UvlR/VH5UvVS+VH9Uv1SAVH9UvlS/VIBUwFSBVIBUv1TAVIFUwVSCVIFUwFTBVIJUwlSDVIJUwVTCVINUw1SEVINUwlTDVIRUxFSFVIRUw1TEVIVUxVSGVIVUxFTFVIZUxlSHVIZUxVTGVIdUx1SIVIdUxlTHVIhUyFSJVIhUx1TIVIlUyVSKVIlUyFTJVIpUylSLVIpUyVTKVItUy1SMVItUylTLVIxUzFSNVIxUy1TMVI1UzVSOVI1UzFTNVI5UzlSPVI5UzVTOVI9Uz1SQVI9UzlTPVJBU0FSRVJBUz1TQVJFU0VSSVJFU0FTRVJJU0lSTVJJU0VTSVJNU01SUVJNU0lTTVJRU1FSVVJRU01TUVJVU1VSWVJVU1FTVVJZU1lSXVJZU1VTWVJdU11SYVJdU1lTXVJhU2FSZVJhU11TYVJlU2VSaVJlU2FTZVJpU2lSbVJpU2VTaVJtU21ScVJtU2lTbVJxU3FSdVJxU21TcVJ1U3VSeVJ1U3FTdVJ5U3lSfVJ5U3VTeVJ9U31SgVJ9U3lTfVKBU4FShVKBU31TgVKFU4VSiVKFU4FThVKJU4lSjVKJU4VTiVKNU41SkVKNU4lTjVKRU5FSlVKRU41TkVKVU5VSmVKVU5FTlVKZU5lSnVKZU5VTmVKdU51SoVKdU5lTnVKhU6FSpVKhU51ToVKlU6VSqVKlU6FTpVKpU6lSrVKpU6VTqVKtU61SsVKtU6lTrVKxU7FStVKxU61TsVK1U7VSuVK1U7FTtVK5U7lSvVK5U7VTuVK9ULhxvHK9U7lQuHNIE71SwVNIEEwXvVLBU8FSxVLBU71TwVLFU8VSyVLFU8FTxVLJU8lSzVLJU8VTyVLNU81S0VLNU8lTzVLRU9FS1VLRU81T0VLVU9VS2VLVU9FT1VLZU9lS3VLZU9VT2VLdU91S4VLdU9lT3VLhU+FS5VLhU91T4VLlU+VS6VLlU+FT5VLpU+lS7VLpU+VT6VLtU+1S8VLtU+lT7VLxU/FS9VLxU+1T8VL1U/VS+VL1U/FT9VL5U/lS/VL5U/VT+VL9U/1TAVL9U/lT/VMBUAFXBVMBU/1QAVcFUAVXCVMFUAFUBVcJUAlXDVMJUAVUCVcNUA1XEVMNUAlUDVcRUBFXFVMRUA1UEVcVUBVXGVMVUBFUFVcZUBlXHVMZUBVUGVcdUB1XIVMdUBlUHVchUCFXJVMhUB1UIVclUCVXKVMlUCFUJVcpUClXLVMpUCVUKVctUC1XMVMtUClULVcxUDFXNVMxUC1UMVc1UDVXOVM1UDFUNVc5UDlXPVM5UDVUOVc9UD1XQVM9UDlUPVdBUEFXRVNBUD1UQVdFUEVXSVNFUEFURVdJUElXTVNJUEVUSVdNUE1XUVNNUElUTVdRUFFXVVNRUE1UUVdVUFVXWVNVUFFUVVdZUFlXXVNZUFVUWVddUF1XYVNdUFlUXVdhUGFXZVNhUF1UYVdlUGVXaVNlUGFUZVdpUGlXbVNpUGVUaVdtUG1XcVNtUGlUbVdxUHFXdVNxUG1UcVd1UHVXeVN1UHFUdVd5UHlXfVN5UHVUeVd9UH1XgVN9UHlUfVeBUIFXhVOBUH1UgVeFUIVXiVOFUIFUhVeJUIlXjVOJUIVUiVeNUI1XkVONUIlUjVeRUJFXlVORUI1UkVeVUJVXmVOVUJFUlVeZUJlXnVOZUJVUmVedUJ1XoVOdUJlUnVehUKFXpVOhUJ1UoVelUKVXqVOlUKFUpVepUKlXrVOpUKVUqVetUK1XsVOtUKlUrVexULFXtVOxUK1UsVe1ULVXuVO1ULFUtVe5U7RsuHO5ULVXtGxMFLlXvVBMFVAUuVe9UL1XwVO9ULlUvVfBUMFXxVPBUL1UwVfFUMVXyVPFUMFUxVfJUMlXzVPJUMVUyVfNUM1X0VPNUMlUzVfRUNFX1VPRUM1U0VfVUNVX2VPVUNFU1VfZUNlX3VPZUNVU2VfdUN1X4VPdUNlU3VfhUOFX5VPhUN1U4VflUOVX6VPlUOFU5VfpUOlX7VPpUOVU6VftUO1X8VPtUOlU7VfxUPFX9VPxUO1U8Vf1UPVX+VP1UPFU9Vf5UPlX/VP5UPVU+Vf9UP1UAVf9UPlU/VQBVQFUBVQBVP1VAVQFVQVUCVQFVQFVBVQJVQlUDVQJVQVVCVQNVQ1UEVQNVQlVDVQRVRFUFVQRVQ1VEVQVVRVUGVQVVRFVFVQZVRlUHVQZVRVVGVQdVR1UIVQdVRlVHVQhVSFUJVQhVR1VIVQlVSVUKVQlVSFVJVQpVSlULVQpVSVVKVQtVS1UMVQtVSlVLVQxVTFUNVQxVS1VMVQ1VTVUOVQ1VTFVNVQ5VTlUPVQ5VTVVOVQ9VT1UQVQ9VTlVPVRBVUFURVRBVT1VQVRFVUVUSVRFVUFVRVRJVUlUTVRJVUVVSVRNVU1UUVRNVUlVTVRRVVFUVVRRVU1VUVRVVVVUWVRVVVFVVVRZVVlUXVRZVVVVWVRdVV1UYVRdVVlVXVRhVWFUZVRhVV1VYVRlVWVUaVRlVWFVZVRpVWlUbVRpVWVVaVRtVW1UcVRtVWlVbVRxVXFUdVRxVW1VcVR1VXVUeVR1VXFVdVR5VXlUfVR5VXVVeVR9VX1UgVR9VXlVfVSBVYFUhVSBVX1VgVSFVYVUiVSFVYFVhVSJVYlUjVSJVYVViVSNVY1UkVSNVYlVjVSRVZFUlVSRVY1VkVSVVZVUmVSVVZFVlVSZVZlUnVSZVZVVmVSdVZ1UoVSdVZlVnVShVaFUpVShVZ1VoVSlVaVUqVSlVaFVpVSpValUrVSpVaVVqVStVa1UsVStValVrVSxVbFUtVSxVa1VsVS1VrBvtGy1VbFWsG1QFbVUuVVQFlQVtVS5VblUvVS5VbVVuVS9Vb1UwVS9VblVvVTBVcFUxVTBVb1VwVTFVcVUyVTFVcFVxVTJVclUzVTJVcVVyVTNVc1U0VTNVclVzVTRVdFU1VTRVc1V0VTVVdVU2VTVVdFV1VTZVdlU3VTZVdVV2VTdVd1U4VTdVdlV3VThVeFU5VThVd1V4VTlVeVU6VTlVeFV5VTpVelU7VTpVeVV6VTtVe1U8VTtVelV7VTxVfFU9VTxVe1V8VT1VfVU+VT1VfFV9VT5VflU/VT5VfVV+VT9Vf1VAVT9VflV/VUBVgFVBVUBVf1WAVUFVgVVCVUFVgFWBVUJVglVDVUJVgVWCVUNVg1VEVUNVglWDVURVhFVFVURVg1WEVUVVhVVGVUVVhFWFVUZVhlVHVUZVhVWGVUdVh1VIVUdVhlWHVUhViFVJVUhVh1WIVUlViVVKVUlViFWJVUpVilVLVUpViVWKVUtVi1VMVUtVilWLVUxVjFVNVUxVi1WMVU1VjVVOVU1VjFWNVU5VjlVPVU5VjVWOVU9Vj1VQVU9VjlWPVVBVkFVRVVBVj1WQVVFVkVVSVVFVkFWRVVJVklVTVVJVkVWSVVNVk1VUVVNVklWTVVRVlFVVVVRVk1WUVVVVlVVWVVVVlFWVVVZVllVXVVZVlVWWVVdVl1VYVVdVllWXVVhVmFVZVVhVl1WYVVlVmVVaVVlVmFWZVVpVmlVbVVpVmVWaVVtVm1VcVVtVmlWbVVxVnFVdVVxVm1WcVV1VnVVeVV1VnFWdVV5VnlVfVV5VnVWeVV9Vn1VgVV9VnlWfVWBVoFVhVWBVn1WgVWFVoVViVWFVoFWhVWJVolVjVWJVoVWiVWNVo1VkVWNVolWjVWRVpFVlVWRVo1WkVWVVpVVmVWVVpFWlVWZVplVnVWZVpVWmVWdVp1VoVWdVplWnVWhVqFVpVWhVp1WoVWlVqVVqVWlVqFWpVWpVqlVrVWpVqVWqVWtVq1VsVWtVqlWrVWxVaxusG2xVq1VrG5UFrFVtVZUF1gWsVW1VrVVuVW1VrFWtVW5VrlVvVW5VrVWuVW9Vr1VwVW9VrlWvVXBVsFVxVXBVr1WwVXFVsVVyVXFVsFWxVXJVslVzVXJVsVWyVXNVs1V0VXNVslWzVXRVtFV1VXRVs1W0VXVVtVV2VXVVtFW1VXZVtlV3VXZVtVW2VXdVt1V4VXdVtlW3VXhVuFV5VXhVt1W4VXlVuVV6VXlVuFW5VXpVulV7VXpVuVW6VXtVu1V8VXtVulW7VXxVvFV9VXxVu1W8VX1VvVV+VX1VvFW9VX5VvlV/VX5VvVW+VX9Vv1WAVX9VvlW/VYBVwFWBVYBVv1XAVYFVwVWCVYFVwFXBVYJVwlWDVYJVwVXCVYNVw1WEVYNVwlXDVYRVxFWFVYRVw1XEVYVVxVWGVYVVxFXFVYZVxlWHVYZVxVXGVYdVx1WIVYdVxlXHVYhVyFWJVYhVx1XIVYlVyVWKVYlVyFXJVYpVylWLVYpVyVXKVYtVy1WMVYtVylXLVYxVzFWNVYxVy1XMVY1VzVWOVY1VzFXNVY5VzlWPVY5VzVXOVY9Vz1WQVY9VzlXPVZBV0FWRVZBVz1XQVZFV0VWSVZFV0FXRVZJV0lWTVZJV0VXSVZNV01WUVZNV0lXTVZRV1FWVVZRV01XUVZVV1VWWVZVV1FXVVZZV1lWXVZZV1VXWVZdV11WYVZdV1lXXVZhV2FWZVZhV11XYVZlV2VWaVZlV2FXZVZpV2lWbVZpV2VXaVZtV21WcVZtV2lXbVZxV3FWdVZxV21XcVZ1V3VWeVZ1V3FXdVZ5V3lWfVZ5V3VXeVZ9V31WgVZ9V3lXfVaBV4FWhVaBV31XgVaFV4VWiVaFV4FXhVaJV4lWjVaJV4VXiVaNV41WkVaNV4lXjVaRV5FWlVaRV41XkVaVV5VWmVaVV5FXlVaZV5lWnVaZV5VXmVadV51WoVadV5lXnVahV6FWpVahV51XoValV6VWqValV6FXpVapV6lWrVapV6VXqVatVKhtrG6tV6lUqG9YF61WsVdYFFwbrVaxV7FWtVaxV61XsVa1V7VWuVa1V7FXtVa5V7lWvVa5V7VXuVa9V71WwVa9V7lXvVbBV8FWxVbBV71XwVbFV8VWyVbFV8FXxVbJV8lWzVbJV8VXyVbNV81W0VbNV8lXzVbRV9FW1VbRV81X0VbVV9VW2VbVV9FX1VbZV9lW3VbZV9VX2VbdV91W4VbdV9lX3VbhV+FW5VbhV91X4VblV+VW6VblV+FX5VbpV+lW7VbpV+VX6VbtV+1W8VbtV+lX7VbxV/FW9VbxV+1X8Vb1V/VW+Vb1V/FX9Vb5V/lW/Vb5V/VX+Vb9V/1XAVb9V/lX/VcBVAFbBVcBV/1UAVsFVAVbCVcFVAFYBVsJVAlbDVcJVAVYCVsNVA1bEVcNVAlYDVsRVBFbFVcRVA1YEVsVVBVbGVcVVBFYFVsZVBlbHVcZVBVYGVsdVB1bIVcdVBlYHVshVCFbJVchVB1YIVslVCVbKVclVCFYJVspVClbLVcpVCVYKVstVC1bMVctVClYLVsxVDFbNVcxVC1YMVs1VDVbOVc1VDFYNVs5VDlbPVc5VDVYOVs9VD1bQVc9VDlYPVtBVEFbRVdBVD1YQVtFVEVbSVdFVEFYRVtJVElbTVdJVEVYSVtNVE1bUVdNVElYTVtRVFFbVVdRVE1YUVtVVFVbWVdVVFFYVVtZVFlbXVdZVFVYWVtdVF1bYVddVFlYXVthVGFbZVdhVF1YYVtlVGVbaVdlVGFYZVtpVGlbbVdpVGVYaVttVG1bcVdtVGlYbVtxVHFbdVdxVG1YcVt1VHVbeVd1VHFYdVt5VHlbfVd5VHVYeVt9VH1bgVd9VHlYfVuBVIFbhVeBVH1YgVuFVIVbiVeFVIFYhVuJVIlbjVeJVIVYiVuNVI1bkVeNVIlYjVuRVJFblVeRVI1YkVuVVJVbmVeVVJFYlVuZVJlbnVeZVJVYmVudVJ1boVedVJlYnVuhVKFbpVehVJ1YoVulVKVbqVelVKFYpVupV6RoqG+pVKVbpGhcGKlbrVRcGWAYqVutVK1bsVetVKlYrVuxVLFbtVexVK1YsVu1VLVbuVe1VLFYtVu5VLlbvVe5VLVYuVu9VL1bwVe9VLlYvVvBVMFbxVfBVL1YwVvFVMVbyVfFVMFYxVvJVMlbzVfJVMVYyVvNVM1b0VfNVMlYzVvRVNFb1VfRVM1Y0VvVVNVb2VfVVNFY1VvZVNlb3VfZVNVY2VvdVN1b4VfdVNlY3VvhVOFb5VfhVN1Y4VvlVOVb6VflVOFY5VvpVOlb7VfpVOVY6VvtVO1b8VftVOlY7VvxVPFb9VfxVO1Y8Vv1VPVb+Vf1VPFY9Vv5VPlb/Vf5VPVY+Vv9VP1YAVv9VPlY/VgBWQFYBVgBWP1ZAVgFWQVYCVgFWQFZBVgJWQlYDVgJWQVZCVgNWQ1YEVgNWQlZDVgRWRFYFVgRWQ1ZEVgVWRVYGVgVWRFZFVgZWRlYHVgZWRVZGVgdWR1YIVgdWRlZHVghWSFYJVghWR1ZIVglWSVYKVglWSFZJVgpWSlYLVgpWSVZKVgtWS1YMVgtWSlZLVgxWTFYNVgxWS1ZMVg1WTVYOVg1WTFZNVg5WTlYPVg5WTVZOVg9WT1YQVg9WTlZPVhBWUFYRVhBWT1ZQVhFWUVYSVhFWUFZRVhJWUlYTVhJWUVZSVhNWU1YUVhNWUlZTVhRWVFYVVhRWU1ZUVhVWVVYWVhVWVFZVVhZWVlYXVhZWVVZWVhdWV1YYVhdWVlZXVhhWWFYZVhhWV1ZYVhlWWVYaVhlWWFZZVhpWWlYbVhpWWVZaVhtWW1YcVhtWWlZbVhxWXFYdVhxWW1ZcVh1WXVYeVh1WXFZdVh5WXlYfVh5WXVZeVh9WX1YgVh9WXlZfViBWYFYhViBWX1ZgViFWYVYiViFWYFZhViJWYlYjViJWYVZiViNWY1YkViNWYlZjViRWZFYlViRWY1ZkViVWZVYmViVWZFZlViZWZlYnViZWZVZmVidWZ1YoVidWZlZnVihWaFYpVihWZ1ZoVilWqBrpGilWaFaoGlgGaVYqVlgGmQZpVipWalYrVipWaVZqVitWa1YsVitWalZrVixWbFYtVixWa1ZsVi1WbVYuVi1WbFZtVi5WblYvVi5WbVZuVi9Wb1YwVi9WblZvVjBWcFYxVjBWb1ZwVjFWcVYyVjFWcFZxVjJWclYzVjJWcVZyVjNWc1Y0VjNWclZzVjRWdFY1VjRWc1Z0VjVWdVY2VjVWdFZ1VjZWdlY3VjZWdVZ2VjdWd1Y4VjdWdlZ3VjhWeFY5VjhWd1Z4VjlWeVY6VjlWeFZ5VjpWelY7VjpWeVZ6VjtWe1Y8VjtWelZ7VjxWfFY9VjxWe1Z8Vj1WfVY+Vj1WfFZ9Vj5WflY/Vj5WfVZ+Vj9Wf1ZAVj9WflZ/VkBWgFZBVkBWf1aAVkFWgVZCVkFWgFaBVkJWglZDVkJWgVaCVkNWg1ZEVkNWglaDVkRWhFZFVkRWg1aEVkVWhVZGVkVWhFaFVkZWhlZHVkZWhVaGVkdWh1ZIVkdWhlaHVkhWiFZJVkhWh1aIVklWiVZKVklWiFaJVkpWilZLVkpWiVaKVktWi1ZMVktWilaLVkxWjFZNVkxWi1aMVk1WjVZOVk1WjFaNVk5WjlZPVk5WjVaOVk9Wj1ZQVk9WjlaPVlBWkFZRVlBWj1aQVlFWkVZSVlFWkFaRVlJWklZTVlJWkVaSVlNWk1ZUVlNWklaTVlRWlFZVVlRWk1aUVlVWlVZWVlVWlFaVVlZWllZXVlZWlVaWVldWl1ZYVldWllaXVlhWmFZZVlhWl1aYVllWmVZaVllWmFaZVlpWmlZbVlpWmVaaVltWm1ZcVltWmlabVlxWnFZdVlxWm1acVl1WnVZeVl1WnFadVl5WnlZfVl5WnVaeVl9Wn1ZgVl9WnlafVmBWoFZhVmBWn1agVmFWoVZiVmFWoFahVmJWolZjVmJWoVaiVmNWo1ZkVmNWolajVmRWpFZlVmRWo1akVmVWpVZmVmVWpFalVmZWplZnVmZWpVamVmdWp1ZoVmdWplanVmhWZxqoGmhWp1ZnGpkGqFZpVpkG2gaoVmlWqVZqVmlWqFapVmpWqlZrVmpWqVaqVmtWq1ZsVmtWqlarVmxWrFZtVmxWq1asVm1WrVZuVm1WrFatVm5WrlZvVm5WrVauVm9Wr1ZwVm9WrlavVnBWsFZxVnBWr1awVnFWsVZyVnFWsFaxVnJWslZzVnJWsVayVnNWs1Z0VnNWslazVnRWtFZ1VnRWs1a0VnVWtVZ2VnVWtFa1VnZWtlZ3VnZWtVa2VndWt1Z4VndWtla3VnhWuFZ5VnhWt1a4VnlWuVZ6VnlWuFa5VnpWulZ7VnpWuVa6VntWu1Z8VntWula7VnxWvFZ9VnxWu1a8Vn1WvVZ+Vn1WvFa9Vn5WvlZ/Vn5WvVa+Vn9Wv1aAVn9Wvla/VoBWwFaBVoBWv1bAVoFWwVaCVoFWwFbBVoJWwlaDVoJWwVbCVoNWw1aEVoNWwlbDVoRWxFaFVoRWw1bEVoVWxVaGVoVWxFbFVoZWxlaHVoZWxVbGVodWx1aIVodWxlbHVohWyFaJVohWx1bIVpdWylaYVpdWyVbKVphWy1aZVphWylbLVplWzFaaVplWy1bMVppWzVabVppWzFbNVptWzlacVptWzVbOVpxWz1adVpxWzlbPVp1W0FaeVp1Wz1bQVp5W0VafVp5W0FbRVp9W0lagVp9W0VbSVqBW01ahVqBW0lbTVqFW1FaiVqFW01bUVqJW1VajVqJW1FbVVqNW1lakVqNW1VbWVqRW11alVqRW1lbXVqVW2FamVqVW11bYVqZW2VanVqZW2FbZVqdWJhpnGqdW2VYmGtoG2laoVtoGGwfaVqhW21apVqhW2lbbVqlW3FaqVqlW21bcVqpW3VarVqpW3FbdVqtW3lasVqtW3VbeVqxW31atVqxW3lbfVq1W4FauVq1W31bgVq5W4VavVq5W4FbhVq9W4lawVq9W4VbiVrBW41axVrBW4lbjVrFW5FayVrFW41bkVrJW5VazVrJW5FblVrNW5la0VrNW5VbmVrRW51a1VrRW5lbnVrVW6Fa2VrVW51boVrZW6Va3VrZW6FbpVrdW6la4VrdW6VbqVrhW61a5VrhW6lbrVrlW7Fa6VrlW61bsVrpW7Va7VrpW7FbtVrtW7la8VrtW7VbuVrxW71a9VrxW7lbvVr1W8Fa+Vr1W71bwVr5W8Va/Vr5W8FbxVr9W8lbAVr9W8VbyVsBW81bBVsBW8lbzVsFW9FbCVsFW81b0VsJW9VbDVsJW9Fb1VsNW9lbEVsNW9Vb2VsRW91bFVsRW9lb3VsVW+FbGVsVW91b4VsZW+VbHVsZW+Fb5VsdW+lbIVsdW+Vb6VslW/FbKVslW+1b8VspW/VbLVspW/Fb9VstW/lbMVstW/Vb+VsxW/1bNVsxW/lb/Vs1WAFfOVs1W/1YAV85WAVfPVs5WAFcBV89WAlfQVs9WAVcCV9BWA1fRVtBWAlcDV9FWBFfSVtFWA1cEV9JWBVfTVtJWBFcFV9NWBlfUVtNWBVcGV9RWB1fVVtRWBlcHV9VWCFfWVtVWB1cIV9ZWCVfXVtZWCFcJV9dWClfYVtdWCVcKV9hWC1fZVthWClcLV9lW5RkmGtlWC1flGRsHDFfaVhsHXAcMV9pWDVfbVtpWDFcNV9tWDlfcVttWDVcOV9xWD1fdVtxWDlcPV91WEFfeVt1WD1cQV95WEVffVt5WEFcRV99WElfgVt9WEVcSV+BWE1fhVuBWElcTV+FWFFfiVuFWE1cUV+JWFVfjVuJWFFcVV+NWFlfkVuNWFVcWV+RWF1flVuRWFlcXV+VWGFfmVuVWF1cYV+ZWGVfnVuZWGFcZV+dWGlfoVudWGVcaV+hWG1fpVuhWGlcbV+lWHFfqVulWG1ccV+pWHVfrVupWHFcdV+tWHlfsVutWHVceV+xWH1ftVuxWHlcfV+1WIFfuVu1WH1cgV+5WIVfvVu5WIFchV+9WIlfwVu9WIVciV/BWI1fxVvBWIlcjV/FWJFfyVvFWI1ckV/JWJVfzVvJWJFclV/NWJlf0VvNWJVcmV/RWJ1f1VvRWJlcnV/VWKFf2VvVWJ1coV/ZWKVf3VvZWKFcpV/dWKlf4VvdWKVcqV/hWK1f5VvhWKlcrV/lWLFf6VvlWK1csV/tWLlf8VvtWLVcuV/xWL1f9VvxWLlcvV/1WMFf+Vv1WL1cwV/5WMVf/Vv5WMFcxV/9WMlcAV/9WMVcyVwBXM1cBVwBXMlczVwFXNFcCVwFXM1c0VwJXNVcDVwJXNFc1VwNXNlcEVwNXNVc2VwRXN1cFVwRXNlc3VwVXOFcGVwVXN1c4VwZXOVcHVwZXOFc5VwdXOlcIVwdXOVc6VwhXO1cJVwhXOlc7VwlXPFcKVwlXO1c8VwpXPVcLVwpXPFc9VwtXpBnlGQtXPVekGVwHPlcMV1wHnQc+VwxXP1cNVwxXPlc/Vw1XQFcOVw1XP1dAVw5XQVcPVw5XQFdBVw9XQlcQVw9XQVdCVxBXQ1cRVxBXQldDVxFXRFcSVxFXQ1dEVxJXRVcTVxJXRFdFVxNXRlcUVxNXRVdGVxRXR1cVVxRXRldHVxVXSFcWVxVXR1dIVxZXSVcXVxZXSFdJVxdXSlcYVxdXSVdKVxhXS1cZVxhXSldLVxlXTFcaVxlXS1dMVxpXTVcbVxpXTFdNVxtXTlccVxtXTVdOVxxXT1cdVxxXTldPVx1XUFceVx1XT1dQVx5XUVcfVx5XUFdRVx9XUlcgVx9XUVdSVyBXU1chVyBXUldTVyFXVFciVyFXU1dUVyJXVVcjVyJXVFdVVyNXVlckVyNXVVdWVyRXV1clVyRXVldXVyVXWFcmVyVXV1dYVyZXWVcnVyZXWFdZVydXWlcoVydXWVdaVyhXW1cpVyhXWldbVylXXFcqVylXW1dcVypXXVcrVypXXFddVytXXlcsVytXXVdeVy1XYFcuVy1XX1dgVy5XYVcvVy5XYFdhVy9XYlcwVy9XYVdiVzBXY1cxVzBXYldjVzFXZFcyVzFXY1dkVzJXZVczVzJXZFdlVzNXZlc0VzNXZVdmVzRXZ1c1VzRXZldnVzVXaFc2VzVXZ1doVzZXaVc3VzZXaFdpVzdXalc4VzdXaVdqVzhXa1c5VzhXaldrVzlXbFc6VzlXa1dsVzpXbVc7VzpXbFdtVztXblc8VztXbVduVzxXb1c9VzxXbldvVz1XYxmkGT1Xb1djGZ0HcFc+V50H3gdwVz5XcVc/Vz5XcFdxVz9XcldAVz9XcVdyV0BXc1dBV0BXcldzV0FXdFdCV0FXc1d0V0JXdVdDV0JXdFd1V0NXdldEV0NXdVd2V0RXd1dFV0RXdld3V0VXeFdGV0VXd1d4V0ZXeVdHV0ZXeFd5V0dXeldIV0dXeVd6V0hXe1dJV0hXeld7V0lXfFdKV0lXe1d8V0pXfVdLV0pXfFd9V0tXfldMV0tXfVd+V0xXf1dNV0xXfld/V01XgFdOV01Xf1eAV05XgVdPV05XgFeBV09XgldQV09XgVeCV1BXg1dRV1BXgleDV1FXhFdSV1FXg1eEV1JXhVdTV1JXhFeFV1NXhldUV1NXhVeGV1RXh1dVV1RXhleHV1VXiFdWV1VXh1eIV1ZXiVdXV1ZXiFeJV1dXildYV1dXiVeKV1hXi1dZV1hXileLV1lXjFdaV1lXi1eMV1pXjVdbV1pXjFeNV1tXjldcV1tXjVeOV1xXj1ddV1xXjlePV11XkFdeV11Xj1eQV19XkldgV19XkVeSV2BXk1dhV2BXkleTV2FXlFdiV2FXk1eUV2JXlVdjV2JXlFeVV2NXlldkV2NXlVeWV2RXl1dlV2RXlleXV2VXmFdmV2VXl1eYV2ZXmVdnV2ZXmFeZV2dXmldoV2dXmVeaV2hXm1dpV2hXmlebV2lXnFdqV2lXm1ecV2pXnVdrV2pXnFedV2tXnldsV2tXnVeeV2xXn1dtV2xXnlefV21XoFduV21Xn1egV25XoVdvV25XoFehV29XIhljGW9XoVciGd4HoldwV94HHwiiV3BXo1dxV3BXolejV3FXpFdyV3FXo1ekV3JXpVdzV3JXpFelV3NXpld0V3NXpVemV3RXp1d1V3RXplenV3VXqFd2V3VXp1eoV3ZXqVd3V3ZXqFepV3dXqld4V3dXqVeqV3hXq1d5V3hXqlerV3lXrFd6V3lXq1esV3pXrVd7V3pXrFetV3tXrld8V3tXrVeuV3xXr1d9V3xXrlevV31XsFd+V31Xr1ewV35XsVd/V35XsFexV39XsleAV39XsVeyV4BXs1eBV4BXslezV4FXtFeCV4FXs1e0V4JXtVeDV4JXtFe1V4NXtleEV4NXtVe2V4RXt1eFV4RXtle3V4VXuFeGV4VXt1e4V4ZXuVeHV4ZXuFe5V4dXuleIV4dXuVe6V4hXu1eJV4hXule7V4lXvFeKV4lXu1e8V4pXvVeLV4pXvFe9V4tXvleMV4tXvVe+V4xXv1eNV4xXvle/V41XwFeOV41Xv1fAV45XwVePV45XwFfBV49XwleQV49XwVfCV5FXxFeSV5FXw1fEV5JXxVeTV5JXxFfFV5NXxleUV5NXxVfGV5RXx1eVV5RXxlfHV5VXyFeWV5VXx1fIV5ZXyVeXV5ZXyFfJV5dXyleYV5dXyVfKV5hXy1eZV5hXylfLV5lXzFeaV5lXy1fMV5pXzVebV5pXzFfNV5tXzlecV5tXzVfOV5xXz1edV5xXzlfPV51X0FeeV51Xz1fQV55X0VefV55X0FfRV59X0legV59X0VfSV6BX01ehV6BX0lfTV6FX4RgiGaFX01fhGB8I1FeiVx8IYAjUV6JX1VejV6JX1FfVV6NX1lekV6NX1VfWV6RX11elV6RX1lfXV6VX2FemV6VX11fYV6ZX2VenV6ZX2FfZV6dX2leoV6dX2VfaV6hX21epV6hX2lfbV6lX3FeqV6lX21fcV6pX3VerV6pX3FfdV6tX3lesV6tX3VfeV6xX31etV6xX3lffV61X4FeuV61X31fgV65X4VevV65X4FfhV69X4lewV69X4VfiV7BX41exV7BX4lfjV7FX5FeyV7FX41fkV7JX5VezV7JX5FflV7NX5le0V7NX5VfmV7RX51e1V7RX5lfnV7VX6Fe2V7VX51foV7ZX6Ve3V7ZX6FfpV7dX6le4V7dX6VfqV7hX61e5V7hX6lfrV7lX7Fe6V7lX61fsV7pX7Ve7V7pX7FftV7tX7le8V7tX7VfuV7xX71e9V7xX7lfvV71X8Fe+V71X71fwV75X8Ve/V75X8FfxV79X8lfAV79X8VfyV8BX81fBV8BX8lfzV8FX9FfCV8FX81f0V8NX9lfEV8NX9Vf2V8RX91fFV8RX9lf3V8VX+FfGV8VX91f4V8ZX+VfHV8ZX+Ff5V8dX+lfIV8dX+Vf6V8hX+1fJV8hX+lf7V8lX/FfKV8lX+1f8V8pX/VfLV8pX/Ff9V8tX/lfMV8tX/Vf+V8xX/1fNV8xX/lf/V81XAFjOV81X/1cAWM5XAVjPV85XAFgBWM9XAljQV89XAVgCWNBXA1jRV9BXAlgDWNFXBFjSV9FXA1gEWNJXBVjTV9JXBFgFWNNXoBjhGNNXBVigGGAIBljUV2AIoQgGWNRXB1jVV9RXBlgHWNVXCFjWV9VXB1gIWNZXCVjXV9ZXCFgJWNdXCljYV9dXCVgKWNhXC1jZV9hXClgLWNlXDFjaV9lXC1gMWNpXDVjbV9pXDFgNWNtXDljcV9tXDVgOWNxXD1jdV9xXDlgPWN1XEFjeV91XD1gQWN5XEVjfV95XEFgRWN9XEljgV99XEVgSWOBXE1jhV+BXElgTWOFXFFjiV+FXE1gUWOJXFVjjV+JXFFgVWONXFljkV+NXFVgWWORXF1jlV+RXFlgXWOVXGFjmV+VXF1gYWOZXGVjnV+ZXGFgZWOdXGljoV+dXGVgaWOhXG1jpV+hXGlgbWOlXHFjqV+lXG1gcWOpXHVjrV+pXHFgdWOtXHljsV+tXHVgeWOxXH1jtV+xXHlgfWO1XIFjuV+1XH1ggWO5XIVjvV+5XIFghWO9XIljwV+9XIVgiWPBXI1jxV/BXIlgjWPFXJFjyV/FXI1gkWPJXJVjzV/JXJFglWPNXJlj0V/NXJVgmWPVXKFj2V/VXJ1goWPZXKVj3V/ZXKFgpWPdXKlj4V/dXKVgqWPhXK1j5V/hXKlgrWPlXLFj6V/lXK1gsWPpXLVj7V/pXLFgtWPtXLlj8V/tXLVguWPxXL1j9V/xXLlgvWP1XMFj+V/1XL1gwWP5XMVj/V/5XMFgxWP9XMlgAWP9XMVgyWABYM1gBWABYMlgzWAFYNFgCWAFYM1g0WAJYNVgDWAJYNFg1WANYNlgEWANYNVg2WARYN1gFWARYNlg3WAVYXxigGAVYN1hfGKEIOFgGWKEI4gg4WAZYOVgHWAZYOFg5WAdYOlgIWAdYOVg6WAhYO1gJWAhYOlg7WAlYPFgKWAlYO1g8WApYPVgLWApYPFg9WAtYPlgMWAtYPVg+WAxYP1gNWAxYPlg/WA1YQFgOWA1YP1hAWA5YQVgPWA5YQFhBWA9YQlgQWA9YQVhCWBBYQ1gRWBBYQlhDWBFYRFgSWBFYQ1hEWBJYRVgTWBJYRFhFWBNYRlgUWBNYRVhGWBRYR1gVWBRYRlhHWBVYSFgWWBVYR1hIWBZYSVgXWBZYSFhJWBdYSlgYWBdYSVhKWBhYS1gZWBhYSlhLWBlYTFgaWBlYS1hMWBpYTVgbWBpYTFhNWBtYTlgcWBtYTVhOWBxYT1gdWBxYTlhPWB1YUFgeWB1YT1hQWB5YUVgfWB5YUFhRWB9YUlggWB9YUVhSWCBYU1ghWCBYUlhTWCFYVFgiWCFYU1hUWCJYVVgjWCJYVFhVWCNYVlgkWCNYVVhWWCRYV1glWCRYVlhXWCVYWFgmWCVYV1hYWCdYWlgoWCdYWVhaWChYW1gpWChYWlhbWClYXFgqWClYW1hcWCpYXVgrWCpYXFhdWCtYXlgsWCtYXVheWCxYX1gtWCxYXlhfWC1YYFguWC1YX1hgWC5YYVgvWC5YYFhhWC9YYlgwWC9YYVhiWDBYY1gxWDBYYlhjWDFYZFgyWDFYY1hkWDJYZVgzWDJYZFhlWDNYZlg0WDNYZVhmWDRYZ1g1WDRYZlhnWDVYaFg2WDVYZ1hoWDZYaVg3WDZYaFhpWDdYHhhfGDdYaVgeGOIIalg4WOIIIwlqWDhYa1g5WDhYalhrWDlYbFg6WDlYa1hsWDpYbVg7WDpYbFhtWDtYblg8WDtYbVhuWDxYb1g9WDxYblhvWD1YcFg+WD1Yb1hwWD5YcVg/WD5YcFhxWD9YclhAWD9YcVhyWEBYc1hBWEBYclhzWEFYdFhCWEFYc1h0WEJYdVhDWEJYdFh1WENYdlhEWENYdVh2WERYd1hFWERYdlh3WEVYeFhGWEVYd1h4WEZYeVhHWEZYeFh5WEdYelhIWEdYeVh6WEhYe1hJWEhYelh7WElYfFhKWElYe1h8WEpYfVhLWEpYfFh9WEtYflhMWEtYfVh+WExYf1hNWExYflh/WE1YgFhOWE1Yf1iAWE5YgVhPWE5YgFiBWE9YglhQWE9YgViCWFBYg1hRWFBYgliDWFFYhFhSWFFYg1iEWFJYhVhTWFJYhFiFWFNYhlhUWFNYhViGWFRYh1hVWFRYhliHWFVYiFhWWFVYh1iIWFZYiVhXWFZYiFiJWFdYilhYWFdYiViKWFlYjFhaWFlYi1iMWFpYjVhbWFpYjFiNWFtYjlhcWFtYjViOWFxYj1hdWFxYjliPWF1YkFheWF1Yj1iQWF5YkVhfWF5YkFiRWF9YklhgWF9YkViSWGBYk1hhWGBYkliTWGFYlFhiWGFYk1iUWGJYlVhjWGJYlFiVWGNYllhkWGNYlViWWGRYl1hlWGRYlliXWGVYmFhmWGVYl1iYWGZYmVhnWGZYmFiZWGdYmlhoWGdYmViaWGhYm1hpWGhYmlibWGlY3RceGGlYm1jdFyMJnFhqWCMJZAmcWGpYnVhrWGpYnFidWGtYnlhsWGtYnVieWGxYn1htWGxYnlifWG1YoFhuWG1Yn1igWG5YoVhvWG5YoFihWG9YolhwWG9YoViiWHBYo1hxWHBYolijWHFYpFhyWHFYo1ikWHJYpVhzWHJYpFilWHNYplh0WHNYpVimWHRYp1h1WHRYplinWHVYqFh2WHVYp1ioWHZYqVh3WHZYqFipWHdYqlh4WHdYqViqWHhYq1h5WHhYqlirWHlYrFh6WHlYq1isWHpYrVh7WHpYrFitWHtYrlh8WHtYrViuWHxYr1h9WHxYrlivWH1YsFh+WH1Yr1iwWH5YsVh/WH5YsFixWH9YsliAWH9YsViyWIBYs1iBWIBYslizWIFYtFiCWIFYs1i0WIJYtViDWIJYtFi1WINYtliEWINYtVi2WIRYt1iFWIRYtli3WIVYuFiGWIVYt1i4WIZYuViHWIZYuFi5WIdYuliIWIdYuVi6WIhYu1iJWIhYuli7WIlYvFiKWIlYu1i8WItYvliMWItYvVi+WIxYv1iNWIxYvli/WI1YwFiOWI1Yv1jAWI5YwViPWI5YwFjBWI9YwliQWI9YwVjCWJBYw1iRWJBYwljDWJFYxFiSWJFYw1jEWJJYxViTWJJYxFjFWJNYxliUWJNYxVjGWJRYx1iVWJRYxljHWJVYyFiWWJVYx1jIWJZYyViXWJZYyFjJWJdYyliYWJdYyVjKWJhYy1iZWJhYyljLWJlYzFiaWJlYy1jMWJpYzVibWJpYzFjNWJtYnBfdF5tYzVicF2QJzlicWGQJpQnOWJxYz1idWJxYzljPWJ1Y0FieWJ1Yz1jQWJ5Y0VifWJ5Y0FjRWJ9Y0ligWJ9Y0VjSWKBY01ihWKBY0ljTWKFY1FiiWKFY01jUWKJY1VijWKJY1FjVWKNY1likWKNY1VjWWKRY11ilWKRY1ljXWKVY2FimWKVY11jYWKZY2VinWKZY2FjZWKdY2lioWKdY2VjaWKhY21ipWKhY2ljbWKlY3FiqWKlY21jcWKpY3VirWKpY3FjdWKtY3lisWKtY3VjeWKxY31itWKxY3ljfWK1Y4FiuWK1Y31jgWK5Y4VivWK5Y4FjhWK9Y4liwWK9Y4VjiWLBY41ixWLBY4ljjWLFY5FiyWLFY41jkWLJY5VizWLJY5FjlWLNY5li0WLNY5VjmWLRY51i1WLRY5ljnWLVY6Fi2WLVY51joWLZY6Vi3WLZY6FjpWLdY6li4WLdY6VjqWLhY61i5WLhY6ljrWLlY7Fi6WLlY61jsWLpY7Vi7WLpY7FjtWLtY7li8WLtY7VjuWL1Y8Fi+WL1Y71jwWL5Y8Vi/WL5Y8FjxWL9Y8ljAWL9Y8VjyWMBY81jBWMBY8ljzWMFY9FjCWMFY81j0WMJY9VjDWMJY9Fj1WMNY9ljEWMNY9Vj2WMRY91jFWMRY9lj3WMVY+FjGWMVY91j4WMZY+VjHWMZY+Fj5WMdY+ljIWMdY+Vj6WMhY+1jJWMhY+lj7WMlY/FjKWMlY+1j8WMpY/VjLWMpY/Fj9WMtY/ljMWMtY/Vj+WMxY/1jNWMxY/lj/WM1YWxecF81Y/1hbF6UJAFnOWKUJ5gkAWc5YAVnPWM5YAFkBWc9YAlnQWM9YAVkCWdBYA1nRWNBYAlkDWdFYBFnSWNFYA1kEWdJYBVnTWNJYBFkFWdNYBlnUWNNYBVkGWdRYB1nVWNRYBlkHWdVYCFnWWNVYB1kIWdZYCVnXWNZYCFkJWddYClnYWNdYCVkKWdhYC1nZWNhYClkLWdlYDFnaWNlYC1kMWdpYDVnbWNpYDFkNWdtYDlncWNtYDVkOWdxYD1ndWNxYDlkPWd1YEFneWN1YD1kQWd5YEVnfWN5YEFkRWd9YElngWN9YEVkSWeBYE1nhWOBYElkTWeFYFFniWOFYE1kUWeJYFVnjWOJYFFkVWeNYFlnkWONYFVkWWeRYF1nlWORYFlkXWeVYGFnmWOVYF1kYWeZYGVnnWOZYGFkZWedYGlnoWOdYGVkaWehYG1npWOhYGlkbWelYHFnqWOlYG1kcWepYHVnrWOpYHFkdWetYHlnsWOtYHVkeWexYH1ntWOxYHlkfWe1YIFnuWO1YH1kgWe9YIlnwWO9YIVkiWfBYI1nxWPBYIlkjWfFYJFnyWPFYI1kkWfJYJVnzWPJYJFklWfNYJln0WPNYJVkmWfRYJ1n1WPRYJlknWfVYKFn2WPVYJ1koWfZYKVn3WPZYKFkpWfdYKln4WPdYKVkqWfhYK1n5WPhYKlkrWflYLFn6WPlYK1ksWfpYLVn7WPpYLFktWftYLln8WPtYLVkuWfxYL1n9WPxYLlkvWf1YMFn+WP1YL1kwWf5YMVn/WP5YMFkxWf9YGhdbF/9YMVkaF+YJMlkAWeYJJwoyWQBZM1kBWQBZMlkzWQFZNFkCWQFZM1k0WQJZNVkDWQJZNFk1WQNZNlkEWQNZNVk2WQRZN1kFWQRZNlk3WQVZOFkGWQVZN1k4WQZZOVkHWQZZOFk5WQdZOlkIWQdZOVk6WQhZO1kJWQhZOlk7WQlZPFkKWQlZO1k8WQpZPVkLWQpZPFk9WQtZPlkMWQtZPVk+WQxZP1kNWQxZPlk/WQ1ZQFkOWQ1ZP1lAWQ5ZQVkPWQ5ZQFlBWQ9ZQlkQWQ9ZQVlCWRBZQ1kRWRBZQllDWRFZRFkSWRFZQ1lEWRJZRVkTWRJZRFlFWRNZRlkUWRNZRVlGWRRZR1kVWRRZRllHWRVZSFkWWRVZR1lIWRZZSVkXWRZZSFlJWRdZSlkYWRdZSVlKWRhZS1kZWRhZSllLWRlZTFkaWRlZS1lMWRpZTVkbWRpZTFlNWRtZTlkcWRtZTVlOWRxZT1kdWRxZTllPWR1ZUFkeWR1ZT1lQWR5ZUVkfWR5ZUFlRWR9ZUlkgWR9ZUVlSWSFZYVkiWSFZYFlhWSJZYlkjWSJZYVliWSNZY1kkWSNZYlljWSRZZFklWSRZY1lkWSVZZVkmWSVZZFllWSZZZlknWSZZZVlmWSdZZ1koWSdZZllnWShZaFkpWShZZ1loWSlZaVkqWSlZaFlpWSpZalkrWSpZaVlqWStZa1ksWStZallrWSxZbFktWSxZa1lsWS1ZbVkuWS1ZbFltWS5ZblkvWS5ZbVluWS9Zb1kwWS9ZbllvWTBZcFkxWTBZb1lwWTFZ2RYaFzFZcFnZFicKcVkyWScKaApxWTJZclkzWTJZcVlyWTNZc1k0WTNZcllzWTRZdFk1WTRZc1l0WTVZdVk2WTVZdFl1WTZZdlk3WTZZdVl2WTdZd1k4WTdZdll3WThZeFk5WThZd1l4WTlZeVk6WTlZeFl5WTpZelk7WTpZeVl6WTtZe1k8WTtZell7WTxZfFk9WTxZe1l8WT1ZfVk+WT1ZfFl9WT5Zflk/WT5ZfVl+WT9Zf1lAWT9Zfll/WUBZgFlBWUBZf1mAWUFZgVlCWUFZgFmBWUJZgllDWUJZgVmCWUNZg1lEWUNZglmDWURZhFlFWURZg1mEWUVZhVlGWUVZhFmFWUZZhllHWUZZhVmGWUdZh1lIWUdZhlmHWUhZiFlJWUhZh1mIWUlZiVlKWUlZiFmJWUpZillLWUpZiVmKWUtZi1lMWUtZilmLWUxZjFlNWUxZi1mMWU1ZjVlOWU1ZjFmNWU5ZjllPWU5ZjVmOWU9Zj1lQWU9ZjlmPWVBZkFlRWVBZj1mQWVFZkVlSWVFZkFmRWVJZkllTWVJZkVmSWVNZk1lUWVNZklmTWVRZlFlVWVRZk1mUWVVZlVlWWVVZlFmVWVZZlllXWVZZlVmWWVdZl1lYWVdZllmXWVhZmFlZWVhZl1mYWVlZmVlaWVlZmFmZWVpZmllbWVpZmVmaWVtZm1lcWVtZmlmbWVxZnFldWVxZm1mcWV1ZnVleWV1ZnFmdWV5ZnllfWV5ZnVmeWV9Zn1lgWV9ZnlmfWWBZoFlhWWBZn1mgWWFZoVliWWFZoFmhWWJZolljWWJZoVmiWWNZo1lkWWNZolmjWWRZpFllWWRZo1mkWWVZpVlmWWVZpFmlWWZZpllnWWZZpVmmWWdZp1loWWdZplmnWWhZqFlpWWhZp1moWWlZqVlqWWlZqFmpWWpZqllrWWpZqVmqWWtZq1lsWWtZqlmrWWxZrFltWWxZq1msWW1ZrVluWW1ZrFmtWW5ZrllvWW5ZrVmuWW9Zr1lwWW9ZrlmvWXBZmBbZFnBZr1mYFmgKsFlxWWgKqQqwWXFZsVlyWXFZsFmxWXJZsllzWXJZsVmyWXNZs1l0WXNZslmzWXRZtFl1WXRZs1m0WXVZtVl2WXVZtFm1WXZZtll3WXZZtVm2WXdZt1l4WXdZtlm3WXhZuFl5WXhZt1m4WXlZuVl6WXlZuFm5WXpZull7WXpZuVm6WXtZu1l8WXtZulm7WXxZvFl9WXxZu1m8WX1ZvVl+WX1ZvFm9WX5Zvll/WX5ZvVm+WX9Zv1mAWX9Zvlm/WYBZwFmBWYBZv1nAWYFZwVmCWYFZwFnBWYJZwlmDWYJZwVnCWYNZw1mEWYNZwlnDWYRZxFmFWYRZw1nEWYVZxVmGWYVZxFnFWYZZxlmHWYZZxVnGWYdZx1mIWYdZxlnHWYhZyFmJWYhZx1nIWYlZyVmKWYlZyFnJWYpZylmLWYpZyVnKWYtZy1mMWYtZylnLWYxZzFmNWYxZy1nMWY1ZzVmOWY1ZzFnNWY5ZzlmPWY5ZzVnOWY9Zz1mQWY9ZzlnPWZBZ0FmRWZBZz1nQWZFZ0VmSWZFZ0FnRWZJZ0lmTWZJZ0VnSWZNZ01mUWZNZ0lnTWZRZ1FmVWZRZ01nUWZVZ1VmWWZVZ1FnVWZZZ1lmXWZZZ1VnWWZdZ11mYWZdZ1lnXWZhZ2FmZWZhZ11nYWZlZ2VmaWZlZ2FnZWZpZ2lmbWZpZ2VnaWZtZ21mcWZtZ2lnbWZxZ3FmdWZxZ21ncWZ1Z3VmeWZ1Z3FndWZ5Z3lmfWZ5Z3VneWZ9Z31mgWZ9Z3lnfWaBZ4FmhWaBZ31ngWaFZ4VmiWaFZ4FnhWaJZ4lmjWaJZ4VniWaNZ41mkWaNZ4lnjWaRZ5FmlWaRZ41nkWaVZ5VmmWaVZ5FnlWaZZ5lmnWaZZ5VnmWadZ51moWadZ5lnnWahZ6FmpWahZ51noWalZ6VmqWalZ6FnpWapZ6lmrWapZ6VnqWatZ61msWatZ6lnrWaxZ7FmtWaxZ61nsWa1Z7VmuWa1Z7FntWa5Z7lmvWa5Z7VnuWa9ZVxaYFq9Z7llXFqkK71mwWakK6grvWbBZ8FmxWbBZ71nwWbFZ8VmyWbFZ8FnxWbJZ8lmzWbJZ8VnyWbNZ81m0WbNZ8lnzWbRZ9Fm1WbRZ81n0WbVZ9Vm2WbVZ9Fn1WbZZ9lm3WbZZ9Vn2WbdZ91m4WbdZ9ln3WbhZ+Fm5WbhZ91n4WblZ+Vm6WblZ+Fn5WbpZ+lm7WbpZ+Vn6WbtZ+1m8WbtZ+ln7WbxZ/Fm9WbxZ+1n8Wb1Z/Vm+Wb1Z/Fn9Wb5Z/lm/Wb5Z/Vn+Wb9Z/1nAWb9Z/ln/WcBZAFrBWcBZ/1kAWsFZAVrCWcFZAFoBWsJZAlrDWcJZAVoCWsNZA1rEWcNZAloDWsRZBFrFWcRZA1oEWsVZBVrGWcVZBFoFWsZZBlrHWcZZBVoGWsdZB1rIWcdZBloHWshZCFrJWchZB1oIWslZCVrKWclZCFoJWspZClrLWcpZCVoKWstZC1rMWctZCloLWsxZDFrNWcxZC1oMWs1ZDVrOWc1ZDFoNWs5ZDlrPWc5ZDVoOWs9ZD1rQWc9ZDloPWtBZEFrRWdBZD1oQWtFZEVrSWdFZEFoRWtJZElrTWdJZEVoSWtNZE1rUWdNZEloTWtRZFFrVWdRZE1oUWtVZFVrWWdVZFFoVWtZZFlrXWdZZFVoWWtdZF1rYWddZFloXWthZGFrZWdhZF1oYWtlZGVraWdlZGFoZWtpZGlrbWdpZGVoaWttZG1rcWdtZGlobWtxZHFrdWdxZG1ocWt1ZHVreWd1ZHFodWt5ZHlrfWd5ZHVoeWt9ZH1rgWd9ZHlofWuBZIFrhWeBZH1ogWuFZIVriWeFZIFohWuJZIlrjWeJZIVoiWuNZI1rkWeNZIlojWuRZJFrlWeRZI1okWuVZJVrmWeVZJFolWuZZJlrnWeZZJVomWudZJ1roWedZJlonWuhZKFrpWehZJ1ooWulZKVrqWelZKFopWupZKlrrWepZKVoqWutZK1rsWetZKlorWuxZLFrtWexZK1osWu1ZLVruWe1ZLFotWu5ZFhZXFu5ZLVoWFuoKLlrvWeoKKwsuWu9ZL1rwWe9ZLlovWvBZMFrxWfBZL1owWvFZMVryWfFZMFoxWvJZMlrzWfJZMVoyWvNZM1r0WfNZMlozWvRZNFr1WfRZM1o0WvVZNVr2WfVZNFo1WvZZNlr3WfZZNVo2WvdZN1r4WfdZNlo3WvhZOFr5WfhZN1o4WvlZOVr6WflZOFo5WvpZOlr7WfpZOVo6WvtZO1r8WftZOlo7WvxZPFr9WfxZO1o8Wv1ZPVr+Wf1ZPFo9Wv5ZPlr/Wf5ZPVo+Wv9ZP1oAWv9ZPlo/WgBaQFoBWgBaP1pAWgFaQVoCWgFaQFpBWgJaQloDWgJaQVpCWgNaQ1oEWgNaQlpDWgRaRFoFWgRaQ1pEWgVaRVoGWgVaRFpFWgZaRloHWgZaRVpGWgdaR1oIWgdaRlpHWghaSFoJWghaR1pIWglaSVoKWglaSFpJWgpaSloLWgpaSVpKWgtaS1oMWgtaSlpLWgxaTFoNWgxaS1pMWg1aTVoOWg1aTFpNWg5aTloPWg5aTVpOWg9aT1oQWg9aTlpPWhBaUFoRWhBaT1pQWhFaUVoSWhFaUFpRWhJaUloTWhJaUVpSWhNaU1oUWhNaUlpTWhRaVFoVWhRaU1pUWhVaVVoWWhVaVFpVWhZaVloXWhZaVVpWWhdaV1oYWhdaVlpXWhhaWFoZWhhaV1pYWhlaWVoaWhlaWFpZWhpaWlobWhpaWVpaWhtaW1ocWhtaWlpbWhxaXFodWhxaW1pcWh1aXVoeWh1aXFpdWh5aXlofWh5aXVpeWh9aX1ogWh9aXlpfWiBaYFohWiBaX1pgWiFaYVoiWiFaYFphWiJaYlojWiJaYVpiWiNaY1okWiNaYlpjWiRaZFolWiRaY1pkWiVaZVomWiVaZFplWiZaZlonWiZaZVpmWidaZ1ooWidaZlpnWihaaFopWihaZ1poWilaaVoqWilaaFppWipaalorWipaaVpqWitaa1osWitaalprWixabFotWixaa1psWi1a1RUWFi1abFrVFSsLbVouWisLbAttWi5ablovWi5abVpuWi9ab1owWi9ablpvWjBacFoxWjBab1pwWjFacVoyWjFacFpxWjJaclozWjJacVpyWjNac1o0WjNaclpzWjRadFo1WjRac1p0WjVadVo2WjVadFp1WjZadlo3WjZadVp2Wjdad1o4Wjdadlp3WjhaeFo5Wjhad1p4WjlaeVo6WjlaeFp5Wjpaelo7WjpaeVp6Wjtae1o8Wjtaelp7WjxafFo9Wjxae1p8Wj1afVo+Wj1afFp9Wj5aflo/Wj5afVp+Wj9af1pAWj9aflp/WkBagFpBWkBaf1qAWkFagVpCWkFagFqBWkJaglpDWkJagVqCWkNag1pEWkNaglqDWkRahFpFWkRag1qEWkVahVpGWkVahFqFWkZahlpHWkZahVqGWkdah1pIWkdahlqHWkhaiFpJWkhah1qIWklaiVpKWklaiFqJWkpailpLWkpaiVqKWktai1pMWktailqLWkxajFpNWkxai1qMWk1ajVpOWk1ajFqNWk5ajlpPWk5ajVqOWk9aj1pQWk9ajlqPWlBakFpRWlBaj1qQWlFakVpSWlFakFqRWlJaklpTWlJakVqSWlNak1pUWlNaklqTWlRalFpVWlRak1qUWlValVpWWlValFqVWlZallpXWlZalVqWWldal1pYWldallqXWlhamFpZWlhal1qYWllamVpaWllamFqZWlpamlpbWlpamVqaWltam1pcWltamlqbWlxanFpdWlxam1qcWl1anVpeWl1anFqdWl5anlpfWl5anVqeWl9an1pgWl9anlqfWmBaoFphWmBan1qgWmFaoVpiWmFaoFqhWmJaolpjWmJaoVqiWmNao1pkWmNaolqjWmRapFplWmRao1qkWmVapVpmWmVapFqlWmZaplpnWmZapVqmWmdap1poWmdaplqnWmhaqFppWmhap1qoWmlaqVpqWmlaqFqpWmpaqlprWmpaqVqqWmtaq1psWmtaqlqrWmxalBXVFWxaq1qUFWwLrFptWmwLrQusWm1arVpuWm1arFqtWm5arlpvWm5arVquWm9ar1pwWm9arlqvWnBasFpxWnBar1qwWnFasVpyWnFasFqxWnJaslpzWnJasVqyWnNas1p0WnNaslqzWnRatFp1WnRas1q0WnVatVp2WnVatFq1WnZatlp3WnZatVq2Wndat1p4Wndatlq3WnhauFp5Wnhat1q4WnlauVp6WnlauFq5Wnpaulp7WnpauVq6Wntau1p8Wntaulq7WnxavFp9Wnxau1q8Wn1avVp+Wn1avFq9Wn5avlp/Wn5avVq+Wn9av1qAWn9avlq/WoBawFqBWoBav1rAWoFawVqCWoFawFrBWoJawlqDWoJawVrCWoNaw1qEWoNawlrDWoRaxFqFWoRaw1rEWoVaxVqGWoVaxFrFWoZaxlqHWoZaxVrGWodax1qIWodaxlrHWohayFqJWohax1rIWolayVqKWolayFrJWopaylqLWopayVrKWotay1qMWotaylrLWoxazFqNWoxay1rMWo1azVqOWo1azFrNWo5azlqPWo5azVrOWo9az1qQWo9azlrPWpBa0FqRWpBaz1rQWpFa0VqSWpFa0FrRWpJa0lqTWpJa0VrSWpNa01qUWpNa0lrTWpRa1FqVWpRa01rUWpVa1VqWWpVa1FrVWpZa1lqXWpZa1VrWWpda11qYWpda1lrXWpha2FqZWpha11rYWpla2VqaWpla2FrZWppa2lqbWppa2VraWpta21qcWpta2lrbWpxa3FqdWpxa21rcWp1a3VqeWp1a3FrdWp5a3lqfWp5a3VreWp9a31qgWp9a3lrfWqBa4FqhWqBa31rgWqFa4VqiWqFa4FrhWqJa4lqjWqJa4VriWqNa41qkWqNa4lrjWqRa5FqlWqRa41rkWqVa5VqmWqVa5FrlWqZa5lqnWqZa5VrmWqda51qoWqda5lrnWqha6FqpWqha51roWqla6VqqWqla6FrpWqpa6lqrWqpa6VrqWqtaUxWUFata6lpTFa0L61qsWq0L7gvrWqxa7FqtWqxa61rsWq1a7VquWq1a7FrtWq5a7lqvWq5a7VruWq9a71qwWq9a7lrvWrBa8FqxWrBa71rwWrFa8VqyWrFa8FrxWrJa8lqzWrJa8VryWrNa81q0WrNa8lrzWrRa9Fq1WrRa81r0WrVa9Vq2WrVa9Fr1WrZa9lq3WrZa9Vr2Wrda91q4Wrda9lr3Wrha+Fq5Wrha91r4Wrla+Vq6Wrla+Fr5Wrpa+lq7Wrpa+Vr6Wrta+1q8Wrta+lr7Wrxa/Fq9Wrxa+1r8Wr1a/Vq+Wr1a/Fr9Wr5a/lq/Wr5a/Vr+Wr9a/1rAWr9a/lr/WsBaAFvBWsBa/1oAW8FaAVvCWsFaAFsBW8JaAlvDWsJaAVsCW8NaA1vEWsNaAlsDW8RaBFvFWsRaA1sEW8VaBVvGWsVaBFsFW8ZaBlvHWsZaBVsGW8daB1vIWsdaBlsHW8haCFvJWshaB1sIW8laCVvKWslaCFsJW8paClvLWspaCVsKW8taC1vMWstaClsLW8xaDFvNWsxaC1sMW81aDVvOWs1aDFsNW85aDlvPWs5aDVsOW89aD1vQWs9aDlsPW9BaEFvRWtBaD1sQW9FaEVvSWtFaEFsRW9JaElvTWtJaEVsSW9NaE1vUWtNaElsTW9RaFFvVWtRaE1sUW9VaFVvWWtVaFFsVW9ZaFlvXWtZaFVsWW9daF1vYWtdaFlsXW9haGFvZWthaF1sYW9laGVvaWtlaGFsZW9paGlvbWtpaGVsaW9taG1vcWttaGlsbW9xaHFvdWtxaG1scW91aHVveWt1aHFsdW95aHlvfWt5aHVseW99aH1vgWt9aHlsfW+BaIFvhWuBaH1sgW+FaIVviWuFaIFshW+JaIlvjWuJaIVsiW+NaI1vkWuNaIlsjW+RaJFvlWuRaI1skW+VaJVvmWuVaJFslW+ZaJlvnWuZaJVsmW+daJ1voWudaJlsnW+haKFvpWuhaJ1soW+laKVvqWulaKFspW+paEhVTFepaKVsSFe4LKlvrWu4LLwwqW+taK1vsWutaKlsrW+xaLFvtWuxaK1ssW+1aLVvuWu1aLFstW+5aLlvvWu5aLVsuW+9aL1vwWu9aLlsvW/BaMFvxWvBaL1swW/FaMVvyWvFaMFsxW/JaMlvzWvJaMVsyW/NaM1v0WvNaMlszW/RaNFv1WvRaM1s0W/VaNVv2WvVaNFs1W/ZaNlv3WvZaNVs2W/daN1v4WvdaNls3W/haOFv5WvhaN1s4W/laOVv6WvlaOFs5W/paOlv7WvpaOVs6W/taO1v8WvtaOls7W/xaPFv9WvxaO1s8W/1aPVv+Wv1aPFs9W/5aPlv/Wv5aPVs+W/9aP1sAW/9aPls/WwBbQFsBWwBbP1tAWwFbQVsCWwFbQFtBWwJbQlsDWwJbQVtCWwNbQ1sEWwNbQltDWwRbRFsFWwRbQ1tEWwVbRVsGWwVbRFtFWwZbRlsHWwZbRVtGWwdbR1sIWwdbRltHWwhbSFsJWwhbR1tIWwlbSVsKWwlbSFtJWwpbSlsLWwpbSVtKWwtbS1sMWwtbSltLWwxbTFsNWwxbS1tMWw1bTVsOWw1bTFtNWw5bTlsPWw5bTVtOWw9bT1sQWw9bTltPWxBbUFsRWxBbT1tQWxFbUVsSWxFbUFtRWxJbUlsTWxJbUVtSWxNbU1sUWxNbUltTWxRbVFsVWxRbU1tUWxVbVVsWWxVbVFtVWxZbVlsXWxZbVVtWWxdbV1sYWxdbVltXWxhbWFsZWxhbV1tYWxlbWVsaWxlbWFtZWxpbWlsbWxpbWVtaWxtbW1scWxtbWltbWxxbXFsdWxxbW1tcWx1bXVseWx1bXFtdWx5bXlsfWx5bXVteWx9bX1sgWx9bXltfWyBbYFshWyBbX1tgWyFbYVsiWyFbYFthWyJbYlsjWyJbYVtiWyNbY1skWyNbYltjWyRbZFslWyRbY1tkWyVbZVsmWyVbZFtlWyZbZlsnWyZbZVtmWydbZ1soWydbZltnWyhbaFspWyhbZ1toWylb0RQSFSlbaFvRFC8MaVsqWy8McAxpWypbalsrWypbaVtqWytba1ssWytbaltrWyxbbFstWyxba1tsWy1bbVsuWy1bbFttWy5bblsvWy5bbVtuWy9bb1swWy9bbltvWzBbcFsxWzBbb1twWzFbcVsyWzFbcFtxWzJbclszWzJbcVtyWzNbc1s0WzNbcltzWzRbdFs1WzRbc1t0WzVbdVs2WzVbdFt1WzZbdls3WzZbdVt2Wzdbd1s4Wzdbdlt3WzhbeFs5Wzhbd1t4WzlbeVs6WzlbeFt5Wzpbels7WzpbeVt6Wztbe1s8Wztbelt7WzxbfFs9Wzxbe1t8Wz1bfVs+Wz1bfFt9Wz5bfls/Wz5bfVt+Wz9bf1tAWz9bflt/W0BbgFtBW0Bbf1uAW0FbgVtCW0FbgFuBW0JbgltDW0JbgVuCW0Nbg1tEW0NbgluDW0RbhFtFW0Rbg1uEW0VbhVtGW0VbhFuFW0ZbhltHW0ZbhVuGW0dbh1tIW0dbhluHW0hbiFtJW0hbh1uIW0lbiVtKW0lbiFuJW0pbiltLW0pbiVuKW0tbi1tMW0tbiluLW0xbjFtNW0xbi1uMW01bjVtOW01bjFuNW05bjltPW05bjVuOW09bj1tQW09bjluPW1BbkFtRW1Bbj1uQW1FbkVtSW1FbkFuRW1JbkltTW1JbkVuSW1Nbk1tUW1NbkluTW1RblFtVW1Rbk1uUW1VblVtWW1VblFuVW1ZblltXW1ZblVuWW1dbl1tYW1dblluXW1hbmFtZW1hbl1uYW1lbmVtaW1lbmFuZW1pbmltbW1pbmVuaW1tbm1tcW1tbmlubW1xbnFtdW1xbm1ucW11bnVteW11bnFudW15bnltfW15bnVueW19bn1tgW19bnlufW2BboFthW2Bbn1ugW2FboVtiW2FboFuhW2JboltjW2JboVuiW2Nbo1tkW2NbolujW2RbpFtlW2Rbo1ukW2VbpVtmW2VbpFulW2ZbpltnW2ZbpVumW2dbp1toW2dbplunW2hbkBTRFGhbp1uQFHAMqFtpW3AMsQyoW2lbqVtqW2lbqFupW2pbqltrW2pbqVuqW2tbq1tsW2tbqlurW2xbrFttW2xbq1usW21brVtuW21brFutW25brltvW25brVuuW29br1twW29brluvW3BbsFtxW3Bbr1uwW3FbsVtyW3FbsFuxW3JbsltzW3JbsVuyW3Nbs1t0W3NbsluzW3RbtFt1W3Rbs1u0W3VbtVt2W3VbtFu1W3Zbtlt3W3ZbtVu2W3dbt1t4W3dbtlu3W3hbuFt5W3hbt1u4W3lbuVt6W3lbuFu5W3pbult7W3pbuVu6W3tbu1t8W3tbulu7W3xbvFt9W3xbu1u8W31bvVt+W31bvFu9W35bvlt/W35bvVu+W39bv1uAW39bvlu/W4BbwFuBW4Bbv1vAW4FbwVuCW4FbwFvBW4JbwluDW4JbwVvCW4Nbw1uEW4NbwlvDW4RbxFuFW4Rbw1vEW4VbxVuGW4VbxFvFW4ZbxluHW4ZbxVvGW4dbx1uIW4dbxlvHW4hbyFuJW4hbx1vIW4lbyVuKW4lbyFvJW4pbyluLW4pbyVvKW4tby1uMW4tbylvLW4xbzFuNW4xby1vMW41bzVuOW41bzFvNW45bzluPW45bzVvOW49bz1uQW49bzlvPW5Bb0FuRW5Bbz1vQW5Fb0VuSW5Fb0FvRW5Jb0luTW5Jb0VvSW5Nb01uUW5Nb0lvTW5Rb1FuVW5Rb01vUW5Vb1VuWW5Vb1FvVW5Zb1luXW5Zb1VvWW5db11uYW5db1lvXW5hb2FuZW5hb11vYW5lb2VuaW5lb2FvZW5pb2lubW5pb2VvaW5tb21ucW5tb2lvbW5xb3FudW5xb21vcW51b3VueW51b3FvdW55b3lufW55b3VveW59b31ugW59b3lvfW6Bb4FuhW6Bb31vgW6Fb4VuiW6Fb4FvhW6Jb4lujW6Jb4VviW6Nb41ukW6Nb4lvjW6Rb5FulW6Rb41vkW6Vb5VumW6Vb5FvlW6Zb5lunW6Zb5VvmW6dbTxSQFKdb5ltPFLEM51uoW7EM8gznW6hb6FupW6hb51voW6lb6VuqW6lb6FvpW6pb6lurW6pb6VvqW6tb61usW6tb6lvrW6xb7FutW6xb61vsW61b7VuuW61b7FvtW65b7luvW65b7VvuW69b71uwW69b7lvvW7Bb8FuxW7Bb71vwW7Fb8VuyW7Fb8FvxW7Jb8luzW7Jb8VvyW7Nb81u0W7Nb8lvzW7Rb9Fu1W7Rb81v0W7Vb9Vu2W7Vb9Fv1W7Zb9lu3W7Zb9Vv2W7db91u4W7db9lv3W7hb+Fu5W7hb91v4W7lb+Vu6W7lb+Fv5W7pb+lu7W7pb+Vv6W7tb+1u8W7tb+lv7W7xb/Fu9W7xb+1v8W71b/Vu+W71b/Fv9W75b/lu/W75b/Vv+W79b/1vAW79b/lv/W8BbAFzBW8Bb/1sAXMFbAVzCW8FbAFwBXMJbAlzDW8JbAVwCXMNbA1zEW8NbAlwDXMRbBFzFW8RbA1wEXMVbBVzGW8VbBFwFXMZbBlzHW8ZbBVwGXMdbB1zIW8dbBlwHXMhbCFzJW8hbB1wIXMlbCVzKW8lbCFwJXMpbClzLW8pbCVwKXMtbC1zMW8tbClwLXMxbDFzNW8xbC1wMXM1bDVzOW81bDFwNXM5bDlzPW85bDVwOXM9bD1zQW89bDlwPXNBbEFzRW9BbD1wQXNFbEVzSW9FbEFwRXNJbElzTW9JbEVwSXNNbE1zUW9NbElwTXNRbFFzVW9RbE1wUXNVbFVzWW9VbFFwVXNZbFlzXW9ZbFVwWXNdbF1zYW9dbFlwXXNhbGFzZW9hbF1wYXNlbGVzaW9lbGFwZXNpbGlzbW9pbGVwaXNtbG1zcW9tbGlwbXNxbHFzdW9xbG1wcXN1bHVzeW91bHFwdXN5bHlzfW95bHVweXN9bH1zgW99bHlwfXOBbIFzhW+BbH1wgXOFbIVziW+FbIFwhXOJbIlzjW+JbIVwiXONbI1zkW+NbIlwjXORbJFzlW+RbI1wkXOVbJVzmW+VbJFwlXOZbDhRPFOZbJVwOFPIMJlznW/IMMw0mXOdbJ1zoW+dbJlwnXOhbKFzpW+hbJ1woXOlbKVzqW+lbKFwpXOpbKlzrW+pbKVwqXOtbK1zsW+tbKlwrXOxbLFztW+xbK1wsXO1bLVzuW+1bLFwtXO5bLlzvW+5bLVwuXO9bL1zwW+9bLlwvXPBbMFzxW/BbL1wwXPFbMVzyW/FbMFwxXPJbMlzzW/JbMVwyXPNbM1z0W/NbMlwzXPRbNFz1W/RbM1w0XPVbNVz2W/VbNFw1XPZbNlz3W/ZbNVw2XPdbN1z4W/dbNlw3XPhbOFz5W/hbN1w4XPlbOVz6W/lbOFw5XPpbOlz7W/pbOVw6XPtbO1z8W/tbOlw7XPxbPFz9W/xbO1w8XP1bPVz+W/1bPFw9XP5bPlz/W/5bPVw+XP9bP1wAXP9bPlw/XABcQFwBXABcP1xAXAFcQVwCXAFcQFxBXAJcQlwDXAJcQVxCXANcQ1wEXANcQlxDXARcRFwFXARcQ1xEXAVcRVwGXAVcRFxFXAZcRlwHXAZcRVxGXAdcR1wIXAdcRlxHXAhcSFwJXAhcR1xIXAlcSVwKXAlcSFxJXApcSlwLXApcSVxKXAtcS1wMXAtcSlxLXAxcTFwNXAxcS1xMXA1cTVwOXA1cTFxNXA5cTlwPXA5cTVxOXA9cT1wQXA9cTlxPXBBcUFwRXBBcT1xQXBFcUVwSXBFcUFxRXBJcUlwTXBJcUVxSXBNcU1wUXBNcUlxTXBRcVFwVXBRcU1xUXBVcVVwWXBVcVFxVXBZcVlwXXBZcVVxWXBdcV1wYXBdcVlxXXBhcWFwZXBhcV1xYXBlcWVwaXBlcWFxZXBpcWlwbXBpcWVxaXBtcW1wcXBtcWlxbXBxcXFwdXBxcW1xcXB1cXVweXB1cXFxdXB5cXlwfXB5cXVxeXB9cX1wgXB9cXlxfXCBcYFwhXCBcX1xgXCFcYVwiXCFcYFxhXCJcYlwjXCJcYVxiXCNcY1wkXCNcYlxjXCRcZFwlXCRcY1xkXCVczRMOFCVcZFzNEzMNZVwmXDMNdA1lXCZcZlwnXCZcZVxmXCdcZ1woXCdcZlxnXChcaFwpXChcZ1xoXClcaVwqXClcaFxpXCpcalwrXCpcaVxqXCtca1wsXCtcalxrXCxcbFwtXCxca1xsXC1cbVwuXC1cbFxtXC5cblwvXC5cbVxuXC9cb1wwXC9cblxvXDBccFwxXDBcb1xwXDFccVwyXDFccFxxXDJcclwzXDJccVxyXDNcc1w0XDNcclxzXDRcdFw1XDRcc1x0XDVcdVw2XDVcdFx1XDZcdlw3XDZcdVx2XDdcd1w4XDdcdlx3XDhceFw5XDhcd1x4XDlceVw6XDlceFx5XDpcelw7XDpceVx6XDtce1w8XDtcelx7XDxcfFw9XDxce1x8XD1cfVw+XD1cfFx9XD5cflw/XD5cfVx+XD9cf1xAXD9cflx/XEBcgFxBXEBcf1yAXEFcgVxCXEFcgFyBXEJcglxDXEJcgVyCXENcg1xEXENcglyDXERchFxFXERcg1yEXEVchVxGXEVchFyFXEZchlxHXEZchVyGXEdch1xIXEdchlyHXEhciFxJXEhch1yIXElciVxKXElciFyJXEpcilxLXEpciVyKXEtci1xMXEtcilyLXExcjFxNXExci1yMXE1cjVxOXE1cjFyNXE5cjlxPXE5cjVyOXE9cj1xQXE9cjlyPXFBckFxRXFBcj1yQXFFckVxSXFFckFyRXFJcklxTXFJckVySXFNck1xUXFNcklyTXFRclFxVXFRck1yUXFVclVxWXFVclFyVXFZcllxXXFZclVyWXFdcl1xYXFdcllyXXFhcmFxZXFhcl1yYXFlcmVxaXFlcmFyZXFpcmlxbXFpcmVyaXFtcm1xcXFtcmlybXFxcnFxdXFxcm1ycXF1cnVxeXF1cnFydXF5cnlxfXF5cnVyeXF9cn1xgXF9cnlyfXGBcoFxhXGBcn1ygXGFcoVxiXGFcoFyhXGJcolxjXGJcoVyiXGNco1xkXGNcolyjXGRcjBPNE2Rco1yME3QNpFxlXHQNtQ2kXGVcpVxmXGVcpFylXGZcplxnXGZcpVymXGdcp1xoXGdcplynXGhcqFxpXGhcp1yoXGlcqVxqXGlcqFypXGpcqlxrXGpcqVyqXGtcq1xsXGtcqlyrXGxcrFxtXGxcq1ysXG1crVxuXG1crFytXG5crlxvXG5crVyuXG9cr1xwXG9crlyvXHBcsFxxXHBcr1ywXHFcsVxyXHFcsFyxXHJcslxzXHJcsVyyXHNcs1x0XHNcslyzXHRctFx1XHRcs1y0XHVctVx2XHVctFy1XHZctlx3XHZctVy2XHdct1x4XHdctly3XHhcuFx5XHhct1y4XHlcuVx6XHlcuFy5XHpculx7XHpcuVy6XHtcu1x8XHtculy7XHxcvFx9XHxcu1y8XH1cvVx+XH1cvFy9XH5cvlx/XH5cvVy+XH9cv1yAXH9cvly/XIBcwFyBXIBcv1zAXIFcwVyCXIFcwFzBXIJcwlyDXIJcwVzCXINcw1yEXINcwlzDXIRcxFyFXIRcw1zEXIVcxVyGXIVcxFzFXIZcxlyHXIZcxVzGXIdcx1yIXIdcxlzHXIhcyFyJXIhcx1zIXIlcyVyKXIlcyFzJXIpcylyLXIpcyVzKXItcy1yMXItcylzLXIxczFyNXIxcy1zMXI1czVyOXI1czFzNXI5czlyPXI5czVzOXI9cz1yQXI9czlzPXJBc0FyRXJBcz1zQXJFc0VySXJFc0FzRXJJc0lyTXJJc0VzSXJNc01yUXJNc0lzTXJRc1FyVXJRc01zUXJVc1VyWXJVc1FzVXJZc1lyXXJZc1VzWXJdc11yYXJdc1lzXXJhc2FyZXJhc11zYXJlc2VyaXJlc2FzZXJpc2lybXJpc2VzaXJtc21ycXJtc2lzbXJxc3FydXJxc21zcXJ1c3VyeXJ1c3FzdXJ5c3lyfXJ5c3VzeXJ9c31ygXJ9c3lzfXKBc4FyhXKBc31zgXKFc4VyiXKFc4FzhXKJc4lyjXKJc4VziXKNcSxOME6Nc4lxLE7UN41ykXLUN9g3jXKRc5FylXKRc41zkXKVc5VymXKVc5FzlXKZc5lynXKZc5VzmXKdc51yoXKdc5lznXKhc6FypXKhc51zoXKlc6VyqXKlc6FzpXKpc6lyrXKpc6VzqXKtc61ysXKtc6lzrXKxc7FytXKxc61zsXK1c7VyuXK1c7FztXK5c7lyvXK5c7VzuXK9c71ywXK9c7lzvXLBc8FyxXLBc71zwXLFc8VyyXLFc8FzxXLJc8lyzXLJc8VzyXLNc81y0XLNc8lzzXLRc9Fy1XLRc81z0XLVc9Vy2XLVc9Fz1XLZc9ly3XLZc9Vz2XLdc91y4XLdc9lz3XLhc+Fy5XLhc91z4XLlc+Vy6XLlc+Fz5XLpc+ly7XLpc+Vz6XLtc+1y8XLtc+lz7XLxc/Fy9XLxc+1z8XL1c/Vy+XL1c/Fz9XL5c/ly/XL5c/Vz+XL9c/1zAXL9c/lz/XMBcAF3BXMBc/1wAXcFcAV3CXMFcAF0BXcJcAl3DXMJcAV0CXcNcA13EXMNcAl0DXcRcBF3FXMRcA10EXcVcBV3GXMVcBF0FXcZcBl3HXMZcBV0GXcdcB13IXMdcBl0HXchcCF3JXMhcB10IXclcCV3KXMlcCF0JXcpcCl3LXMpcCV0KXctcC13MXMtcCl0LXcxcDF3NXMxcC10MXc1cDV3OXM1cDF0NXc5cDl3PXM5cDV0OXc9cD13QXM9cDl0PXdBcEF3RXNBcD10QXdFcEV3SXNFcEF0RXdJcEl3TXNJcEV0SXdNcE13UXNNcEl0TXdRcFF3VXNRcE10UXdVcFV3WXNVcFF0VXdZcFl3XXNZcFV0WXddcF13YXNdcFl0XXdhcGF3ZXNhcF10YXdlcGV3aXNlcGF0ZXdpcGl3bXNpcGV0aXdtcG13cXNtcGl0bXdxcHF3dXNxcG10cXd1cHV3eXN1cHF0dXd5cHl3fXN5cHV0eXd9cH13gXN9cHl0fXeBcIF3hXOBcH10gXeFcIV3iXOFcIF0hXeJcChNLE+JcIV0KE/YNIl3jXPYNNw4iXeNcI13kXONcIl0jXeRcJF3lXORcI10kXeVcJV3mXOVcJF0lXeZcJl3nXOZcJV0mXedcJ13oXOdcJl0nXehcKF3pXOhcJ10oXelcKV3qXOlcKF0pXepcKl3rXOpcKV0qXetcK13sXOtcKl0rXexcLF3tXOxcK10sXe1cLV3uXO1cLF0tXe5cLl3vXO5cLV0uXe9cL13wXO9cLl0vXfBcMF3xXPBcL10wXfFcMV3yXPFcMF0xXfJcMl3zXPJcMV0yXfNcM130XPNcMl0zXfRcNF31XPRcM100XfVcNV32XPVcNF01XfZcNl33XPZcNV02XfdcN134XPdcNl03XfhcOF35XPhcN104XflcOV36XPlcOF05XfpcOl37XPpcOV06XftcO138XPtcOl07XfxcPF39XPxcO108Xf1cPV3+XP1cPF09Xf5cPl3/XP5cPV0+Xf9cP10AXf9cPl0/XQBdQF0BXQBdP11AXQFdQV0CXQFdQF1BXQJdQl0DXQJdQV1CXQNdQ10EXQNdQl1DXQRdRF0FXQRdQ11EXQVdRV0GXQVdRF1FXQZdRl0HXQZdRV1GXQddR10IXQddRl1HXQhdSF0JXQhdR11IXQldSV0KXQldSF1JXQpdSl0LXQpdSV1KXQtdS10MXQtdSl1LXQxdTF0NXQxdS11MXQ1dTV0OXQ1dTF1NXQ5dTl0PXQ5dTV1OXQ9dT10QXQ9dTl1PXRBdUF0RXRBdT11QXRFdUV0SXRFdUF1RXRJdUl0TXRJdUV1SXRNdU10UXRNdUl1TXRRdVF0VXRRdU11UXRVdVV0WXRVdVF1VXRZdVl0XXRZdVV1WXRddV10YXRddVl1XXRhdWF0ZXRhdV11YXRldWV0aXRldWF1ZXRpdWl0bXRpdWV1aXRtdW10cXRtdWl1bXRxdXF0dXRxdW11cXR1dXV0eXR1dXF1dXR5dXl0fXR5dXV1eXR9dX10gXR9dXl1fXSBdYF0hXSBdX11gXSFdyRIKEyFdYF3JEjcOYV0iXTcOeA5hXSJdYl0jXSJdYV1iXSNdY10kXSNdYl1jXSRdZF0lXSRdY11kXSVdZV0mXSVdZF1lXSZdZl0nXSZdZV1mXSddZ10oXSddZl1nXShdaF0pXShdZ11oXSldaV0qXSldaF1pXSpdal0rXSpdaV1qXStda10sXStdal1rXSxdbF0tXSxda11sXS1dbV0uXS1dbF1tXS5dbl0vXS5dbV1uXS9db10wXS9dbl1vXTBdcF0xXTBdb11wXTFdcV0yXTFdcF1xXTJdcl0zXTJdcV1yXTNdc100XTNdcl1zXTRddF01XTRdc110XTVddV02XTVddF11XTZddl03XTZddV12XTddd104XTdddl13XThdeF05XThdd114XTldeV06XTldeF15XTpdel07XTpdeV16XTtde108XTtdel17XTxdfF09XTxde118XT1dfV0+XT1dfF19XT5dfl0/XT5dfV1+XT9df11AXT9dfl1/XUBdgF1BXUBdf12AXUFdgV1CXUFdgF2BXUJdgl1DXUJdgV2CXUNdg11EXUNdgl2DXURdhF1FXURdg12EXUVdhV1GXUVdhF2FXUZdhl1HXUZdhV2GXUddh11IXUddhl2HXUhdiF1JXUhdh12IXUldiV1KXUldiF2JXUpdil1LXUpdiV2KXUtdi11MXUtdil2LXUxdjF1NXUxdi12MXU1djV1OXU1djF2NXU5djl1PXU5djV2OXU9dj11QXU9djl2PXVBdkF1RXVBdj12QXVFdkV1SXVFdkF2RXVJdkl1TXVJdkV2SXVNdk11UXVNdkl2TXVRdlF1VXVRdk12UXVVdlV1WXVVdlF2VXVZdll1XXVZdlV2WXVddl11YXVddll2XXVhdmF1ZXVhdl12YXVldmV1aXVldmF2ZXVpdml1bXVpdmV2aXVtdm11cXVtdml2bXVxdnF1dXVxdm12cXV1dnV1eXV1dnF2dXV5dnl1fXV5dnV2eXV9dn11gXV9dnl2fXWBdiBLJEmBdn12IEngOoF1hXXgOuQ6gXWFdoV1iXWFdoF2hXWJdol1jXWJdoV2iXWNdo11kXWNdol2jXWRdpF1lXWRdo12kXWVdpV1mXWVdpF2lXWZdpl1nXWZdpV2mXWddp11oXWddpl2nXWhdqF1pXWhdp12oXWldqV1qXWldqF2pXWpdql1rXWpdqV2qXWtdq11sXWtdql2rXWxdrF1tXWxdq12sXW1drV1uXW1drF2tXW5drl1vXW5drV2uXW9dr11wXW9drl2vXXBdsF1xXXBdr12wXXFdsV1yXXFdsF2xXXJdsl1zXXJdsV2yXXNds110XXNdsl2zXXRdtF11XXRds120XXVdtV12XXVdtF21XXZdtl13XXZdtV22XXddt114XXddtl23XXhduF15XXhdt124XXlduV16XXlduF25XXpdul17XXpduV26XXtdu118XXtdul27XXxdvF19XXxdu128XX1dvV1+XX1dvF29XX5dvl1/XX5dvV2+XX9dv12AXX9dvl2/XYBdwF2BXYBdv13AXYFdwV2CXYFdwF3BXYJdwl2DXYJdwV3CXYNdw12EXYNdwl3DXYRdxF2FXYRdw13EXYVdxV2GXYVdxF3FXYZdxl2HXYZdxV3GXYddx12IXYddxl3HXYhdyF2JXYhdx13IXYldyV2KXYldyF3JXYpdyl2LXYpdyV3KXYtdy12MXYtdyl3LXYxdzF2NXYxdy13MXY1dzV2OXY1dzF3NXY5dzl2PXY5dzV3OXY9dz12QXY9dzl3PXZBd0F2RXZBdz13QXZFd0V2SXZFd0F3RXZJd0l2TXZJd0V3SXZNd012UXZNd0l3TXZRd1F2VXZRd013UXZVd1V2WXZVd1F3VXZZd1l2XXZZd1V3WXZdd112YXZdd1l3XXZhd2F2ZXZhd113YXZld2V2aXZld2F3ZXZpd2l2bXZpd2V3aXZtd212cXZtd2l3bXZxd3F2dXZxd213cXZ1d3V2eXZ1d3F3dXZ5d3l2fXZ5d3V3eXZ9dRxKIEp9d3l1HErkO312gXbkO+g7fXaBd4F2hXaBd313gXaFd4V2iXaFd4F3hXaJd4l2jXaJd4V3iXaNd412kXaNd4l3jXaRd5F2lXaRd413kXaVd5V2mXaVd5F3lXaZd5l2nXaZd5V3mXadd512oXadd5l3nXahd6F2pXahd513oXald6V2qXald6F3pXapd6l2rXapd6V3qXatd612sXatd6l3rXaxd7F2tXaxd613sXa1d7V2uXa1d7F3tXa5d7l2vXa5d7V3uXa9d712wXa9d7l3vXbBd8F2xXbBd713wXbFd8V2yXbFd8F3xXbJd8l2zXbJd8V3yXbNd8120XbNd8l3zXbRd9F21XbRd8130XbVd9V22XbVd9F31XbZd9l23XbZd9V32Xbdd9124Xbdd9l33Xbhd+F25Xbhd9134Xbld+V26Xbld+F35Xbpd+l27Xbpd+V36Xbtd+128Xbtd+l37Xbxd/F29Xbxd+138Xb1d/V2+Xb1d/F39Xb5d/l2/Xb5d/V3+Xb9d/13AXb9d/l3/XcBdAF7BXcBd/10AXsFdAV7CXcFdAF4BXsJdAl7DXcJdAV4CXsNdA17EXcNdAl4DXsRdBF7FXcRdA14EXsVdBV7GXcVdBF4FXsZdBl7HXcZdBV4GXsddB17IXcddBl4HXshdCF7JXchdB14IXsldCV7KXcldCF4JXspdCl7LXcpdCV4KXstdC17MXctdCl4LXsxdDF7NXcxdC14MXs1dDV7OXc1dDF4NXs5dDl7PXc5dDV4OXs9dD17QXc9dDl4PXtBdEF7RXdBdD14QXtFdEV7SXdFdEF4RXtJdEl7TXdJdEV4SXtNdE17UXdNdEl4TXtRdFF7VXdRdE14UXtVdFV7WXdVdFF4VXtZdFl7XXdZdFV4WXtddF17YXdddFl4XXthdGF7ZXdhdF14YXtldGV7aXdldGF4ZXtpdGl7bXdpdGV4aXttdG17cXdtdGl4bXtxdHF7dXdxdG14cXt1dHV7eXd1dHF4dXt5dBhJHEt5dHV4GEvoOHl7fXfoOOw8eXt9dH17gXd9dHl4fXuBdIF7hXeBdH14gXuFdIV7iXeFdIF4hXuJdIl7jXeJdIV4iXuNdI17kXeNdIl4jXuRdJF7lXeRdI14kXuVdJV7mXeVdJF4lXuZdJl7nXeZdJV4mXuddJ17oXeddJl4nXuhdKF7pXehdJ14oXuldKV7qXeldKF4pXupdKl7rXepdKV4qXutdK17sXetdKl4rXuxdLF7tXexdK14sXu1dLV7uXe1dLF4tXu5dLl7vXe5dLV4uXu9dL17wXe9dLl4vXvBdMF7xXfBdL14wXvFdMV7yXfFdMF4xXvJdMl7zXfJdMV4yXvNdM170XfNdMl4zXvRdNF71XfRdM140XvVdNV72XfVdNF41XvZdNl73XfZdNV42XvddN174XfddNl43XvhdOF75XfhdN144XvldOV76XfldOF45XvpdOl77XfpdOV46XvtdO178XftdOl47XvxdPF79XfxdO148Xv1dPV7+Xf1dPF49Xv5dPl7/Xf5dPV4+Xv9dP14AXv9dPl4/XgBeQF4BXgBeP15AXgFeQV4CXgFeQF5BXgJeQl4DXgJeQV5CXgNeQ14EXgNeQl5DXgReRF4FXgReQ15EXgVeRV4GXgVeRF5FXgZeRl4HXgZeRV5GXgdeR14IXgdeRl5HXgheSF4JXgheR15IXgleSV4KXgleSF5JXgpeSl4LXgpeSV5KXgteS14MXgteSl5LXgxeTF4NXgxeS15MXg1eTV4OXg1eTF5NXg5eTl4PXg5eTV5OXg9eT14QXg9eTl5PXhBeUF4RXhBeT15QXhFeUV4SXhFeUF5RXhJeUl4TXhJeUV5SXhNeU14UXhNeUl5TXhReVF4VXhReU15UXhVeVV4WXhVeVF5VXhZeVl4XXhZeVV5WXhdeV14YXhdeVl5XXhheWF4ZXhheV15YXhleWV4aXhleWF5ZXhpeWl4bXhpeWV5aXhteW14cXhteWl5bXhxeXF4dXhxeW15cXh1exREGEh1eXF7FETsPXV4eXjsPfA9dXh5eXl4fXh5eXV5eXh9eX14gXh9eXl5fXiBeYF4hXiBeX15gXiFeYV4iXiFeYF5hXiJeYl4jXiJeYV5iXiNeY14kXiNeYl5jXiReZF4lXiReY15kXiVeZV4mXiVeZF5lXiZeZl4nXiZeZV5mXideZ14oXideZl5nXiheaF4pXiheZ15oXileaV4qXileaF5pXipeal4rXipeaV5qXitea14sXiteal5rXixebF4tXixea15sXi1ebV4uXi1ebF5tXi5ebl4vXi5ebV5uXi9eb14wXi9ebl5vXjBecF4xXjBeb15wXjFecV4yXjFecF5xXjJecl4zXjJecV5yXjNec140XjNecl5zXjRedF41XjRec150XjVedV42XjVedF51XjZedl43XjZedV52Xjded144Xjdedl53XjheeF45Xjhed154XjleeV46XjleeF55Xjpeel47XjpeeV56Xjtee148Xjteel57XjxefF49Xjxee158Xj1efV4+Xj1efF59Xj5efl4/Xj5efV5+Xj9ef15AXj9efl5/XkBegF5BXkBef16AXkFegV5CXkFegF6BXkJegl5DXkJegV6CXkNeg15EXkNegl6DXkRehF5FXkReg16EXkVehV5GXkVehF6FXkZehl5HXkZehV6GXkdeh15IXkdehl6HXkheiF5JXkheh16IXkleiV5KXkleiF6JXkpeil5LXkpeiV6KXktei15MXkteil6LXkxejF5NXkxei16MXk1ejV5OXk1ejF6NXk5ejl5PXk5ejV6OXk9ej15QXk9ejl6PXlBekF5RXlBej16QXlFekV5SXlFekF6RXlJekl5TXlJekV6SXlNek15UXlNekl6TXlRelF5VXlRek16UXlVelV5WXlVelF6VXlZell5XXlZelV6WXldel15YXldell6XXlhemF5ZXlhel16YXllemV5aXllemF6ZXlpeml5bXlpemV6aXltem15cXlteml6bXlxehBHFEVxem16EEXwPnF5dXnwPvQ+cXl1enV5eXl1enF6dXl5enl5fXl5enV6eXl9en15gXl9enl6fXmBeoF5hXmBen16gXmFeoV5iXmFeoF6hXmJeol5jXmJeoV6iXmNeo15kXmNeol6jXmRepF5lXmReo16kXmVepV5mXmVepF6lXmZepl5nXmZepV6mXmdep15oXmdepl6nXmheqF5pXmhep16oXmleqV5qXmleqF6pXmpeql5rXmpeqV6qXmteq15sXmteql6rXmxerF5tXmxeq16sXm1erV5uXm1erF6tXm5erl5vXm5erV6uXm9er15wXm9erl6vXnBesF5xXnBer16wXnFesV5yXnFesF6xXnJesl5zXnJesV6yXnNes150XnNesl6zXnRetF51XnRes160XnVetV52XnVetF61XnZetl53XnZetV62Xndet154Xndetl63XnheuF55Xnhet164XnleuV56XnleuF65Xnpeul57XnpeuV66Xnteu158Xnteul67XnxevF59Xnxeu168Xn1evV5+Xn1evF69Xn5evl5/Xn5evV6+Xn9ev16AXn9evl6/XoBewF6BXoBev17AXoFewV6CXoFewF7BXoJewl6DXoJewV7CXoNew16EXoNewl7DXoRexF6FXoRew17EXoVexV6GXoVexF7FXoZexl6HXoZexV7GXodex16IXodexl7HXoheyF6JXohex17IXoleyV6KXoleyF7JXopeyl6LXopeyV7KXotey16MXoteyl7LXoxezF6NXoxey17MXo1ezV6OXo1ezF7NXo5ezl6PXo5ezV7OXo9ez16QXo9ezl7PXpBe0F6RXpBez17QXpFe0V6SXpFe0F7RXpJe0l6TXpJe0V7SXpNe016UXpNe0l7TXpRe1F6VXpRe017UXpVe1V6WXpVe1F7VXpZe1l6XXpZe1V7WXpde116YXpde1l7XXphe2F6ZXphe117YXple2V6aXple2F7ZXppe2l6bXppe2V7aXpteQxGEEZte2l5DEb0P216cXr0P/g/bXpxe3F6dXpxe217cXp1e3V6eXp1e3F7dXp5e3l6fXp5e3V7eXp9e316gXp9e3l7fXqBe4F6hXqBe317gXqFe4V6iXqFe4F7hXqJe4l6jXqJe4V7iXqNe416kXqNe4l7jXqRe5F6lXqRe417kXqVe5V6mXqVe5F7lXqZe5l6nXqZe5V7mXqde516oXqde5l7nXqhe6F6pXqhe517oXqle6V6qXqle6F7pXqpe6l6rXqpe6V7qXqte616sXqte6l7rXqxe7F6tXqxe617sXq1e7V6uXq1e7F7tXq5e7l6vXq5e7V7uXq9e716wXq9e7l7vXrBe8F6xXrBe717wXrFe8V6yXrFe8F7xXrJe8l6zXrJe8V7yXrNe8160XrNe8l7zXrRe9F61XrRe8170XrVe9V62XrVe9F71XrZe9l63XrZe9V72Xrde9164Xrde9l73Xrhe+F65Xrhe9174Xrle+V66Xrle+F75Xrpe+l67Xrpe+V76Xrte+168Xrte+l77Xrxe/F69Xrxe+178Xr1e/V6+Xr1e/F79Xr5e/l6/Xr5e/V7+Xr9e/17AXr9e/l7/XsBeAF/BXsBe/14AX8FeAV/CXsFeAF8BX8JeAl/DXsJeAV8CX8NeA1/EXsNeAl8DX8ReBF/FXsReA18EX8VeBV/GXsVeBF8FX8ZeBl/HXsZeBV8GX8deB1/IXsdeBl8HX8heCF/JXsheB18IX8leCV/KXsleCF8JX8peCl/LXspeCV8KX8teC1/MXsteCl8LX8xeDF/NXsxeC18MX81eDV/OXs1eDF8NX85eDl/PXs5eDV8OX89eD1/QXs9eDl8PX9BeEF/RXtBeD18QX9FeEV/SXtFeEF8RX9JeEl/TXtJeEV8SX9NeE1/UXtNeEl8TX9ReFF/VXtReE18UX9VeFV/WXtVeFF8VX9ZeFl/XXtZeFV8WX9deF1/YXtdeFl8XX9heGF/ZXtheF18YX9leGV/aXtleGF8ZX9peAhFDEdpeGV8CEf4PGl/bXv4PPxAaX9teG1/cXtteGl8bX9xeHF/dXtxeG18cX91eHV/eXt1eHF8dX95eHl/fXt5eHV8eX99eH1/gXt9eHl8fX+BeIF/hXuBeH18gX+FeIV/iXuFeIF8hX+JeIl/jXuJeIV8iX+NeI1/kXuNeIl8jX+ReJF/lXuReI18kX+VeJV/mXuVeJF8lX+ZeJl/nXuZeJV8mX+deJ1/oXudeJl8nX+heKF/pXuheJ18oX+leKV/qXuleKF8pX+peKl/rXupeKV8qX+teK1/sXuteKl8rX+xeLF/tXuxeK18sX+1eLV/uXu1eLF8tX+5eLl/vXu5eLV8uX+9eL1/wXu9eLl8vX/BeMF/xXvBeL18wX/FeMV/yXvFeMF8xX/JeMl/zXvJeMV8yX/NeM1/0XvNeMl8zX/ReNF/1XvReM180X/VeNV/2XvVeNF81X/ZeNl/3XvZeNV82X/deN1/4XvdeNl83X/heOF/5XvheN184X/leOV/6XvleOF85X/peOl/7XvpeOV86X/teO1/8XvteOl87X/xePF/9XvxeO188X/1ePV/+Xv1ePF89X/5ePl//Xv5ePV8+X/9eP18AX/9ePl8/XwBfQF8BXwBfP19AXwFfQV8CXwFfQF9BXwJfQl8DXwJfQV9CXwNfQ18EXwNfQl9DXwRfRF8FXwRfQ19EXwVfRV8GXwVfRF9FXwZfRl8HXwZfRV9GXwdfR18IXwdfRl9HXwhfSF8JXwhfR19IXwlfSV8KXwlfSF9JXwpfSl8LXwpfSV9KXwtfS18MXwtfSl9LXwxfTF8NXwxfS19MXw1fTV8OXw1fTF9NXw5fTl8PXw5fTV9OXw9fT18QXw9fTl9PXxBfUF8RXxBfT19QXxFfUV8SXxFfUF9RXxJfUl8TXxJfUV9SXxNfU18UXxNfUl9TXxRfVF8VXxRfU19UXxVfVV8WXxVfVF9VXxZfVl8XXxZfVV9WXxdfV18YXxdfVl9XXxhfWF8ZXxhfV19YXxlfwRACERlfWF/BED8QQTEaXz8QADFBMRpfgjEbXxpfQTGCMRtfwzEcXxtfgjHDMRxfBDIdXxxfwzEEMh1fRTIeXx1fBDJFMh5fhjIfXx5fRTKGMh9fxzIgXx9fhjLHMiBfCDMhXyBfxzIIMyFfSTMiXyFfCDNJMyJfijMjXyJfSTOKMyNfyzMkXyNfijPLMyRfDDQlXyRfyzMMNCVfTTQmXyVfDDRNNCZfjjQnXyZfTTSONCdfzzQoXydfjjTPNChfEDUpXyhfzzQQNSlfUTUqXylfEDVRNSpfkjUrXypfUTWSNStf0zUsXytfkjXTNSxfFDYtXyxf0zUUNi1fVTYuXy1fFDZVNi5fljYvXy5fVTaWNi9f1zYwXy9fljbXNjBfGDcxXzBf1zYYNzFfWTcyXzFfGDdZNzJfmjczXzJfWTeaNzNf2zc0XzNfmjfbNzRfHDg1XzRf2zccODVfXTg2XzVfHDhdODZfnjg3XzZfXTieODdf3zg4XzdfnjjfODhfIDk5Xzhf3zggOTlfYTk6XzlfIDlhOTpfojk7XzpfYTmiOTtf4zk8XztfojnjOTxfJDo9Xzxf4zkkOj1fZTo+Xz1fJDplOj5fpjo/Xz5fZTqmOj9f5zpAXz9fpjrnOkBfKDtBX0Bf5zooO0FfaTtCX0FfKDtpO0JfqjtDX0JfaTuqO0Nf6ztEX0NfqjvrO0RfLDxFX0Rf6zssPEVfbTxGX0VfLDxtPEZfrjxHX0ZfbTyuPEdf7zxIX0dfrjzvPEhfMD1JX0hf7zwwPUlfcT1KX0lfMD1xPUpfsj1LX0pfcT2yPUtf8z1MX0tfsj3zPUxfND5NX0xf8z00Pk1fdT5OX01fND51Pk5ftj5PX05fdT62Pk9f9z5QX09ftj73PlBfOD9RX1Bf9z44P1FfeT9SX1FfOD95P1Jfuj9TX1JfeT+6P1Nf+z9UX1Nfuj/7P1RfPEBVX1Rf+z88QFVffUBWX1VfPEB9QFZfvkBXX1ZffUC+QFdf/0BYX1dfvkD/QFhfgBDBEFhf/0CAEA==\")","function base64ToBuffer(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (const i of bytes.keys()) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\nexport default base64ToBuffer(\"pmAAANU1VjbVNV421TVpNtU1djbVNYQ21DWTNtQ1ozbUNbM21DXDNtQ11DbUNeQ21TX1NtU1BTfSNRU3zjUmN8s1ODfJNUs3xjVfN8M1dDfBNYk3vzWgN701tje7Nc43uTXmN7c1/ze1NQw4szUaOLE1JziwNTU4rjVDOK01UjisNWA4qjVuOKk1fTipNYs4qDWaOKg1qTinNbc4pzXFOKY10jimNeA4pTXtOKU1+jikNQc5ozUTOaI1IDmiNSw5oTU4OaE1QzmgNU45oDVaOZ81ZDmfNW85nzV5OaA1gzmhNY05oTWXOaI1oDmkNag5pTWxOaY1uDmoNb85qjXFOas1yzmsNc452DVUNts1YTbcNW423TV8Nt41izbeNZo23zWqNt81uzbgNcs24DXbNuE16zbiNfs24jULN+A1GzfdNSw32jU+N9g1UTfWNWU31DV6N9I1jzfQNaU3zjW7N8010zfLNes3yTUCOMg1DzjGNRw4xTUqOMM1ODjCNUY4wTVUOMA1Yzi/NXE4vjWAOL01jji9NZw4vTWrOL01uji8Ncg4uzXWOLs14zi6NfE4uTX+OLk1Cjm4NRc5tzUjObY1Lzm1NTs5tDVHObQ1UjmzNV05sjVnObI1cjmyNXw5sjWGObI1kDmyNZk5sjWjObI1qzmzNbM5szW7ObQ1wTm0Ncc5szXNObE10TndNVE24DVhNuM1cDblNYA25jWQNuc1oDbpNbA26jXBNus10TbsNeE27jXxNvA1ATfxNRA37zUfN+s1MDfpNUI35zVWN+U1ajfkNX434jWUN+A1qjffNcA33TXYN9w18DfbNQQ42jURONk1HjjXNSw41jU6ONU1SDjVNVc41DVlONM1dDjSNYI40jWRONI1oDjSNa440TW9ONE1yzjRNdk40DXnOM819DjONQE5zTUOOc01GjnMNSc5yzUzOco1PjnJNUo5xzVVOcY1YDnFNWs5xTV1OcQ1gDnDNYo5wzWTOcI1nTnCNaY5wTWuOcE1tjnANb05vzXEOb41yjm8NdA5tzXVOeI1TDbnNV826jVxNu01gjbvNZM28TWkNvI1tTb0NcY29jXWNvg15jb6NfY2/TUFN/81FDf9NSM3+jU0N/g1Rjf2NVk39DVuN/M1gjfxNZg38DWuN+81xTfuNdw37TX0N+w1BjjrNRM46zUgOOo1LjjpNTw46TVLOOg1WTjoNWg45zV3OOc1hTjmNZQ45jWiOOY1sTjmNcA45jXOOOY13DjlNeo45TX3OOQ1BDnjNRE54jUeOeA1KjnfNTY53jVCOd01TTncNVk52jVkOdk1bjnYNXk51jWDOdU1jTnUNZc50jWgOdE1qTnQNbE5zjW5Oc01wTnKNcc5yDXOOcQ11Dm/Ndk56TVINu41XDbyNXA29TWDNvg1lTb6Nac2/DW5Nv81yjYBNts2BDbqNgc2+TYLNgc3DjYVNws2JTcINjY3BjZJNwQ2XDcCNnE3ATaGNwA2nDcANrI3/zXIN/413zf+Nfc3/TUIOP01FDj8NSI4/DUvOPs1PTj7NUw4+zVbOPs1ajj7NXk4+zWIOPs1ljj7NaU4+zW0OPs1wzj6NdE4+jXfOPo17Tj5Nfo4+DUIOfc1FTn2NSE59TUuOfQ1OjnyNUU58TVROe81XDnuNWc57DVyOes1fDnpNYY55zWQOeU1mjnjNaM54TWsOd81tTncNb052jXEOdY1yznTNdI5zjXYOcg13jnxNUI29jVYNvo1bTb+NYI2ATaWNgQ2qTYGNrw2CTbNNgw23jYPNu02Ezb7Nhg2CTccNhY3GjYlNxY2NzcTNko3ETZeNxA2czcQNok3DzafNw82tTcONsw3DjbjNw42+jcONgk4DjYWOA42IzgONjE4DjY/OA42TjgONl04DzZrOA82ezgPNok4DzaYOA82pzgQNrY4EDbFOBA21DgQNuI4DzbwOA42/TgONgs5DTYYOQs2JTkKNjE5CDY9OQc2STkFNlQ5BDZgOQI2azkANnU5/jWAOfw1ijn5NZQ59zWdOfQ1pznxNbA57jW4Oes1wTnnNcg54jXQOd411znYNd050TXkOfo1PDb/NVQ2BDZrNgc2gTYLNpY2DjaqNhE2vTYTNs82FjbfNho27jYgNv02JzYJNyk2FTcoNiM3JDY2NyA2SjcfNmA3HjZ2Nx02jDcdNqI3Hja4Nx42zzceNuU3Hjb9Nx82CzgfNhc4IDYkOCA2MjggNkA4ITZPOCI2XjgiNm04IjZ8OCM2izgjNpo4JDapOCQ2uTglNsc4JTbWOCQ25TgkNvM4JDYBOSM2DjkiNhs5IDYoOR82NTkdNkE5GzZMORo2WDkYNmM5FTZuORM2eTkQNoQ5DjaNOQs2lzkINqE5BTarOQI2tDn+Nbw5+TXFOfU1zTnvNdQ56jXbOeQ14zncNek5BTY1Ngk2TzYNNmo2EjZ/NhU2lTYYNqo2Gza+Nh42zzYhNt82JTbuNi42+zY3NgU3NzYONzg2GjcxNi83LTZINys2YTcrNng3KzaPNyw2pDcsNrs3LTbSNy426DcvNgA4MDYMODE2GDgyNiU4MzYzODM2Qjg0NlA4NTZgODU2bzg2Nn04NzaNODg2nDg5Nqs4OTa6ODk2yTg5Ntg4OTbnODk29jg4NgM5ODYROTc2Hzk1Niw5NDY4OTI2RDkwNlA5LjZbOSs2ZjkpNnE5JjZ8OSQ2hzkhNpE5HjabORo2pTkXNq45Eja3OQ42wDkINsk5AzbROf012Tn3NeA58DXoOeg17zkQNi82FTZKNhk2ZDYdNnw2IDaTNiM2qTYmNr02KTbONi023jY0Nu82PTb5NkQ2/jZONgA3RTYUN0A2JDc5NkQ3ODZgNzg2ejc5NpI3OjaoNzs2vjc8NtQ3PTbqNz82AThBNg04QjYZOEM2JjhFNjQ4RjZDOEc2UjhINmE4STZwOEo2fzhLNo44SzadOEw2rDhNNrw4TjbLOE422zhONuo4Tjb4OE42BzlNNhU5TDYiOUs2LzlJNjs5RzZHOUQ2UzlCNl45QDZpOT02dDk6Nn85NzaKOTQ2lDkxNp45LTaoOSg2sjkjNrs5HjbEORg2zTkSNtU5CzbeOQQ25jn9Ne459TX1ORw2KDYhNkQ2JTZeNig2dzYrNo82LjaoNjE2uzY0Nss2OTbeNkI28TZINvg2UTb+NlM2/zZSNgI3SDYgN0U2QDdENl43RTZ6N0Y2lDdINqs3STbBN0s21zdNNuw3TzYBOFE2DjhTNhs4VTYoOFY2NjhYNkQ4WTZTOFs2YjhcNnE4XjaAOF82jzhgNp44YTauOGI2vThiNs04YzbdOGM27DhjNvs4YzYKOWM2FzliNiU5YDYyOV42PzlcNks5WTZWOVY2YjlUNm05UTZ4OU42gjlKNo05RzaXOUM2oTk/Nqs5Oja1OTU2vzkvNsg5KTbROSI22jkaNuI5EzbrOQs28zkCNvs5KTYgNi02OzYxNlc2NDZxNjc2ijY6NqE2PDa2Nj82yDZENt42SjbvNlQ2/TZYNv42WjYAN1g2BTdUNiE3UTY4N1A2WTdRNng3UzaVN1U2rTdYNsQ3WjbZN1w27jdfNgI4YTYPOGQ2HDhmNik4aTY3OGo2RThsNlQ4bjZiOHA2cjhxNoE4czaQOHQ2nzh1Nq84dja/OHc2zzh4Nt84eDbuOHk2/Th5Ngw5eDYaOXc2KDl2NjU5dDZCOXE2TjluNlk5azZkOWg2bzllNno5YTaFOV42kDlaNpo5VjakOVE2rzlMNrg5RjbCOUA2zDk5NtU5MjbeOSo25zkiNvA5Gjb4ORE2ATo2Nhc2OzYxNj42TzZBNmo2QzaENkU2nDZHNrE2STbENk023TZSNus2Wjb6Nl82/TZgNgI3YDYKN142HDddNi43XTZON142djdgNpU3YzavN2Y2xTdpNto3bDbwN282BDhzNhA4dTYdOHg2Kjh7Njg4fTZGOH82VTiBNmM4gzZyOIU2gTiHNpE4iDagOIo2sDiLNsA4jDbQOI024DiONvA4jzb/OI82DzmPNh05jjYrOYw2ODmKNkQ5hzZQOYM2XDmANmc5fDZyOXk2fTl1Noc5cTaSOW02nTlpNqc5ZDaxOV42vDlYNsU5UTbPOUo22TlDNuM5OzbsOTI29TkpNv45IDYHOkQ2DzZINio2SzZHNk42YzZQNn42UjaWNlM2qzZVNsA2WDbcNlw26DZiNvI2Zzb7Nmo2ATdqNgo3ajYTN2k2KDdqNkI3bDZyN282ljdyNrI3dDbHN3k23Dd9NvI3gDYEOIQ2ETiHNh44ijYrOI02OTiQNkc4kjZWOJQ2ZDiXNnM4mTaCOJs2kTidNqE4njaxOKA2wTihNtE4ojbhOKM28jikNgI5pTYROaU2IDmkNi45ojY7OaA2RzmdNlM5mDZeOZQ2aTmQNnQ5jDZ/OYg2ijmFNpQ5gDafOXw2qjl2NrQ5cTa+OWo2yDljNtI5XDbdOVQ25jlMNvA5Qzb6OTo2AzowNg06UzYHNlY2IjZaNkA2XDZcNl42djZfNo02YDajNmE2uDZlNtQ2bDbqNm828jZzNvs2dDYEN3c2Cjd4NhM3eDYeN3g2SDd7NnQ3fzaYN4M2tDeHNso3izbfN4829TeTNgU4ljYSOJo2HzidNiw4nzY6OKI2SDilNlY4qDZkOKo2czitNoI4rzaSOLE2ojizNrI4tDbCOLY20ji3NuI4uDbzOLo2Azm7NhM5ujYiObk2MDm4Njw5tTZJObI2VTmuNl85qTZrOaQ2dTmgNoA5nDaLOZg2ljmUNqE5kDasOYo2tjmENsE5fTbLOXY21TluNuA5ZjbqOV029DlUNv45SzYJOkE2EjpjNgA2ZjYbNmk2OTZsNlQ2bjZtNm82hDZvNpk2cTawNnI2yTZ4NuA2fTbwNoE2/DaFNgU3hzYON4g2GDeHNik3iTZRN402eTeRNp03lTa4N5o2zzeeNuM3ojb5N6U2BzipNhM4rDYgOLA2LjizNjs4tjZIOLk2Vji8NmU4vjZ0OME2gjjDNpI4xTaiOMc2sjjJNsI4yzbSOMw24zjNNvM4zzYEOc82FDnQNiQ5zjYxOcs2PTnJNkk5yDZXOcM2YTm9Nmw5uTZ3ObQ2gjmwNo05rTaYOak2ozmlNq45nja4OZg2wjmQNs05iTbYOYA24zl4Nu45bzb4OWY2AzpcNg06UjYYOnM2+jV2NhU2ejYxNn02SzZ/NmM2gDZ5NoI2jjaDNqI2hza5Noo20jaRNug2ljb5Npk2BTecNhA3nTYgN502NTefNlg3ozZ/N6Y2oTeqNrw3rTbSN7I25ze2Nvw3uTYIOL02FTjANiE4wzYuOMc2OzjKNkk4zTZWONA2ZTjSNnQ41TaCONc2kjjaNqE43DaxON02wjjfNtI44DbiOOE28zjiNgM54zYTOeM2IznjNjI53TY8Odg2RznYNlQ51jZiOdM2bTnPNnk5yzaEOcY2kDnCNpo5vTakObg2rzmyNrk5qzbEOaQ2zzmcNto5kzblOYs28DmCNvs5eDYHOm82EjpkNh06hDb2NYc2DzaLNis2jzZDNpI2WDaVNms2lzaANpo2kzagNqc2ozbCNqk24TauNvM2sTYCN7Q2ETe1NiE3uDY9N7w2Xze9NoQ3vzamN8I2vjfFNtY3yDbqN8w2/zfPNgo40TYVONQ2IjjYNi442zY7ON42STjhNlY45DZkOOc2czjqNoI47TaROO82oTjwNrE48jbBOPM20TjzNuI49DbxOPQ2Ajn1NhE59TYhOfQ2MDnyNj057zZJOe82VjnuNmQ57DZwOec2fDnjNoc53jaROdg2nDnTNqY5zjavOcg2uTnBNsQ5ujbPObE22jmoNuY5oDbyOZY2/jmMNgo6gjYWOng2ITqXNvI1mTYKNp42IzaiNjo2pjZNNqo2YDavNnM2tTaENr82mTa/NrU2xDbXNsk27TbMNv42zzYPN9E2JTfSNj031TZdN9Y2gzfXNqM32ja+N9s21jffNus34jb/N+Q2CjjnNhU46jYhOO02LTjvNjo48zZIOPY2Vjj5NmQ4/TZzOP82gjgCN5E4BDehOAU3sTgHN8E4BzfROAc34DgHN/A4BzcAOQc3EDkINyA5CDcvOQc3PjkHN0w5BzdaOQg3aDkFN3Q5ATd+Ofs2iDn0NpE57jacOek2pTnkNq853ja4Odc2wznQNs45xzbaOb825jm2NvI5rDb/OaI2DDqYNhg6jDYlOqk28TWsNgc2sTYfNrY2Mza7NkQ2wDZUNsY2ZTbNNnk21jaPNtg2sDbfNtM25DbnNuc2+DbqNgo37TYcN+82NjfxNlk38TZ/N/E2oTfyNr039jbUN/c26Df5Nvw3+zYIOP02Ezj/Nh84AjcsOAU3OTgIN0c4DDdVOBA3ZDgTN3M4FjeBOBk3kTgbN6E4HTewOB03wDgcN884HDfgOBs37zgbN/84HDcQORw3IDkeNzE5HjdBOSA3UDkhN185ITdtOSA3eTkaN4E5EzeIOQk3kDkCN5o5/jajOfk2rTnzNrc57TbBOeU2zDndNtg51TblOcw28jnCNv85uDYNOq02GzqiNig6vjbwNb82BjbFNhw2yjYuNtA2PjbWNk022zZcNuE2cTbqNo428TazNvc2yzb8NuI2ADf0NgI3BTcFNxc3BzcqNws3TTcKN3c3CjeYNww3tDcON8w3DzfiNxA39DcRNwU4EzcROBU3HTgYNyo4Gzc4OB83RjgiN1Q4JjdjOCo3cjguN4E4MDeQODI3oDg0N684NDe/ODM3zzgyN944MDfuODE3ADkxNxE5MzcjOTU3NTk2N0Y5OTdWOTo3Zjk6N3Q5ODd+OTM3hjkmN4k5HDePORU3lzkSN6E5DTerOQc3tDkBN745+jbJOfM21TnrNuM54jbxOdg2/znONg46xDYcOrg2KjrTNvM11DYHNto2GzbgNiw25TY7Nus2SDbxNlY29jZrNvs2hjYHN6M2CzfCNhE33DYTN/I2FTcCNxc3ETcYNyI3HzdDNyA3bjchN5E3IzerNyU3wzclN9Y3JjfrNyc3ATgpNw04KzcaOC43KDgyNzY4NDdEODk3Uzg9N2I4QzdxOEo3fzhLN484TTeeOEw3rjhON744TTfNOEo33ThHN+84RzcCOUg3FDlJNyg5Szc6OU03TDlQN145UTduOVA3eTlNN4A5QjeHOTc3izksN485JTeWOSE3nzkfN6k5GzexORY3ujkPN8U5CDfTOQA34Dn3Nu857jb+OeQ2DjraNh06zzYsOuo29jXsNgs28TYcNvY2Kjb7Njk2ADdGNgY3VTYLN2Y2Ejd+Nhc3nTYdN782IDfZNiM38zYkNwU3JDcRNyk3HTcwNzs3NDdlNzc3hjc6N6A3Oze1Nzs3yjc7N+E3PTf5Nz83CThBNxc4RDclOEc3MzhLN0I4UDdROFM3YThaN3E4XDd/OFw3jThdN504XzevOGM3vzhoN8w4ZDfeOF838DheNwQ5XjcYOV83KzlhNz85YzdSOWQ3YzlkN285YTd4OVs3gjlRN4k5RTeNOTs3kTkzN5Y5LzedOS43pjkuN605KTe1OSM3wDkdN845FTfdOQ037TkDN/05+jYOOvE2HjrlNi46Azf9NQU3EjYJNyA2DDcsNhE3OTYWN0c2HDdVNiI3ZjYoN3w2LTecNjQ3xTYuN+k2Ljf9NjM3DDc4Nxo3OTcnNz03ODdIN143TTd+N083kzdPN6g3UDe/N1E31jdSN/A3UzcFOFU3FDhXNyI4WjcxOF43QThjN1A4aDdfOGc3bzhlN4E4ZjeMOGU3nzhpN7I4cTfEOHQ30jh3N+A4cjfzOHA3BzlxNxo5cjcvOXQ3Qzl2N1c5djdkOXU3bjlwN3k5aTeCOV83iTlTN485SDeSOT43ljk7N505OTekOTk3qjk6N7A5NTe6OTA3xzkpN9g5IjfqORk3/DkQNw06BzcfOv02MDoeNwM2IDcbNiM3JjYkNzA2KDc8Ni03STYxN1g2NjdqNjw3gjZBN6I2SDfRNkY3+TZENwc3TTcZN0k3IDdJNyo3VDdAN103WjdhN3I3YzeGN2Q3nDdjN7Q3ZDfNN2U36DdmNwI4aDcQOGk3HzhsNy44bzc+OHM3Tjh0N104cjdtOG83fDhsN444bDekOHA3uTh5N8g4gTfVOIU34ziCN/Y4gjcJOYI3HDmENzE5hzdHOYg3WTmJN2U5gzdvOX03eTl3N4I5bjeJOWQ3lDlVN5Y5RzeWOUM3mzlDN6E5QzenOUU3rTlGN7M5QTfAOTw30Tk2N+Q5Ljf6OSU3DjocNyE6EjczOjs3BzZANx82PzcqNj83NDZBNz42QzdLNkU3WjZJN2w2TTeHNlE3qDZVN9o2VDf0NlM3DDdTNxQ3VDccN143KzdpNz83bzdSN3I3Zjd2N3s3djeRN3c3qjd3N8Q3eDffN3k3+zd5Nww4ezccOH03KziANzs4gTdLOIA3Wjh8N2o4dTd8OHE3kDhwN6c4dDe7OIA3yziNN9g4kjflOJI3+DiSNwo5kjcdOZQ3MTmXN0g5mzdeOZY3ZjmRN285izd4OYU3gDmBN485cTeROWE3kzlMN5M5SjeWOUs3mDlNN6I5TzerOVE3sjlSN7c5TjfIOUw33DlCN/g5OTcPOjE3IjonNzU6VzcLNl83IzZcNy82Wzc4Nls3QzZaN002XDdbNl43bTZfN4Y2YTeoNmE3zDZdN+42YDf9Nl83DDdoNxc3czcmN3s3NzeBN0g3hTddN4g3cTeJN4g3iTefN4k3ujeJN9Y3ijfxN4o3CDiMNxc4jjcnOI83NziPN0c4jTdXOIY3Zzh+N3o4eTePOHY3pjh5N7w4izfNOJg32zifN+Y4oTf5OKE3CjmiNxw5ozcwOaU3RjmpN1k5ozdkOZ03bTmYN3c5kzeAOZA3jTmIN5A5YTeKOTQ3jjlNN5M5VjeROVs3ljlbN6k5XjeyOWA3tzlhN7w5WzfdOVQ3+TlNNxE6RTclOj03ODpxNw42cjceNnI3LDZxNzg2cDdDNnA3TTZwN102cjdsNnI3gjZzN582czfDNnY32zZ5N+82ezf+Nn03DTeHNxw3jjctN5U3PzeYN1I3mjdnN5o3fjeaN5U3mTevN5o3yTebN+U3mzcCOJw3ETicNyI4nDcyOJs3RDiZN1Q4kjdmOIo3eziGN444gDeiOIU3uTiTN8k4ozfYOKw36DivN/k4sDcJObA3GzmxNy45szdDObY3VTmwN2E5qjdrOaU3djmhN345njeLOZU3jzlpN3U5LDeKOVk3kzllN405bDeTOWo3qzltN7Q5bze7OXE3wTlqN945Zzf8OWE3FDpbNyg6Uzc8OoY3BTaHNxk2iDcpNoc3NzaHN0Q2hzdQNoY3XjaGN242hjeBNoc3mDaKN7A2jTfINpA33TaSN/E2lTcBN5o3DzehNyE3pTcyN6c3RTepN1o3qTdvN6k3hjepN543qje5N6o31jerN/U3qzcLOKo3GzipNy04pzc/OKQ3UjidN2Y4mDd5OJY3iziTN5w4lTeuOKQ3uji0N9I4uzfpOL03+Di+Nwg5vjcZOb43LDnAN0I5wjdTObw3Xjm3N2k5szd1Oa43fjmsN4s5pjeOOXI3aTkNN4c5XzebOYQ3hzmAN485fTeoOX83tTmBN745gjfHOX434jl7N/85dzcXOnI3LDprN0A6nDf9NZ03EzaeNyU2njc1Np03RTadN1I2nDdfNpw3bzabN4A2nDeRNp43pDahN7k2pDfNNqY33zapN/E2rDcCN683ETezNyI3tTc0N7Y3Rze3N103tzd0N7g3jDe5N6g3uTfGN7o35Te6NwM4uTcUOLY3JjizNzo4rjdQOKo3ZDimN3g4pzeIOKg3lDiuN504szeKOMM3zjjKN+k4yzf2OMw3BTnLNxc5yjcrOcs3QDnMN1I5yDddOcQ3aDnBN3Q5vTd9Obs3izm2N445fjdYOfo2gjloN6k5lzeEOZU3jDmSN6o5lDe2OZU3wjmWN8w5kjflOZE3ATqONxo6ijctOoU3QjqzN/c1tDcONrQ3ITa0NzM2tDdCNrQ3UDazN182sjduNrE3fjaxN402sjeeNrM3rza1N8A2tzfQNrk33za8N+42vzf9NsE3DDfDNx83xDcyN8U3SDfFN2A3xzd6N8c3lzfJN7U3yTfUN8k39zfINw04xTcgOME3NDi9N0o4uTdiOLc3eDi4N4c4wDeWOMc3oDjgN4U41DfOONc35jjZN/I42TcBOdg3EznXNyo51jdBOdY3UznVN1050jdpOdA3djnON385zDeLOcg3jjmSN0k51jZ8OXw3tDmqN4Y5qjeLOak3pzmqN7c5rDfFOaw30DmpN+k5qDcDOqc3GjqkNyw6nzdCOss38zXMNwk2zDcdNsw3LzbMNz82yzdPNso3XTbKN2w2yTd7Nsk3iTbJN5Y2yTemNsk3tDbKN8I2yzfONs033TbPN+o20Tf6NtM3DDfUNyA31Tc0N9Y3TjfXN2Y32DeGN9k3ozfZN8Q32jfnN9k3BjjWNxk40zcuOM83RjjMN2E4zDd5OM83jzjUN5843DexOOM3uTjbN8w45jfhOOc37jjnN/445TcSOeM3KzniN0I54TdVOeE3YDnhN2s54Dd3Od03gDncN4052zeQOas3OjnANnA5nzfHOcU3hDnFN4s5wjeuOcM3uznFN8k5wzfUOcE36TnDNwM6wTcaOsE3LDq/N0I65DfwNeQ3BzbkNxw25DcuNuQ3PjbkN0425DdcNuM3azbjN3g24jeGNuI3kzbhN6A24TesNuE3uTbiN8U25DfSNuU34DbmN/A25zcBN+g3FDfoNys36TdEN+o3XjfpN3w36zebN+s3vDfsN9437DcBOOo3FTjpNyo45jdEOOM3YzjjN3045zeXOOc3sjjvN8M48zfNOPM31TjzN9848zfrOPQ3/DjyNxE58TcrOe83RjnxN1o58TdkOfE3bznxN3o57zeCOe83jjntN5E50zc3Oes2bDnON9Q53zeMOeA3jTnfN6s54De7OeA3yTneN9Y53zfpOd43ATrfNxc63zcpOt03Qjr+N/A1/jcHNv43HDb+Ny42/jc/Nv43TTb+N1s2/jdqNv43eDb+N4U2/jeRNv43nTb+N6o2/je2Nv43wjb+N802/jfbNv836zb/N/02/zcSN/83KTf/N0E3/zdcN/83eTf/N5c3ADi5NwA42zcAOAA4ADgTOAA4KTgBOEQ4AThgOAE4fjgAOJs4ADiyOAA4xDgAOM44ADjWOAA44DgAOOo4ADj9OAA4ETkAOC05ADhGOQA4XDkAOGc5ADhxOQA4ejkAOII5ADiOOQA4kjkAODE59jdoOQA42zkAOIk5ADiOOQA4sTkAOL85ADjNOQA42DkAOOk5ADgBOgA4FjoAOCk6ADhCOgw47zUMOAY2CzgbNgs4LTYLOD02DDhNNgw4XDYMOGo2DDh4Ngw4hjYNOJM2DTigNg04rDYNOLk2DTjGNgw40jYMOOA2CzjwNgs4ATcKOBU3CjgsNws4RTcKOF83Czh9Nwo4nDcKOL03CjjfNwo4ATgLOBU4DDgrOA44RDgPOGM4Dzh9OA04ljgNOLE4CDjDOAc4zTgHONU4BzjfOAc46zgHOPw4BzgROQg4KzkJOEY5CDhaOQg4ZDkIOG85CDh6OQk4gjkJOI45CjiRORc4NzmEOGw5GTjUORE4jDkQOI05ETirORE4uzkROMo5ETjXORE46TkSOAE6ETgWOhE4KToSOEI6GDjxNRg4BzYYOBw2GDguNhg4PjYYOE02GThcNhk4azYZOHk2GTiINhk4ljYZOKU2GTi0Nhk4wTYZOM42GDjcNhc46TYWOPk2FTgMNxU4HzcVODQ3FDhNNxQ4ZjcUOIY3EzijNxM4xDcTOOc3FDgGOBY4GTgXOC04GjhFOBs4YDgbOHg4GTiNOBc4nTgSOK84Dzi4OBI4zDgNOOI4DTjuOA04/jgOOBI5DzgqORA4QjkQOFU5EDhgORA4azkROHc5EjiAORM4jTkTOJA5Kzg6OZ04cTkwOMc5HjiFOR44izkgOK45Hzi7OR44yTkfONQ5IDjpOR84AjogOBo6IDgsOiE4QjokOPU1JDgLNiQ4HzYjODA2JDg/NiQ4TjYkOF02JThtNiU4fDYlOIs2JTidNiQ4rTYkOL82IzjPNiI43jYgOOw2Hzj7Nh44CzcdOB03HTgxNx04RzcdOF83HDh5Nxw4ljcbOLQ3GzjTNxs49jccOA04HjgfOCA4MzgjOEk4JThhOCY4dzglOIY4ITiVOB04nzgQOIU4FjjOOBU45TgUOPI4FDgBORQ4EzkVOCo5FjhBORY4UzkWOF05FzhpORk4djkaOIA5GziMOR04jjk3OEk5kzh7OUI4tDkrOIY5KziLOSw4pzkrOLc5KzjFOSs40TksOOk5LDgDOi04GjouOCw6MThCOjA4+jUvOBA2LzgiNi84MjYvOEI2LzhPNi84XDYwOG02MDh+Ni84jzYuOKI2LTi4Niw4zDYrON42KTjvNig4ADcmOBA3JTggNyQ4MjckOEY3IzhbNyM4cjcjOIs3IzinNyM4xTciOOQ3IzgCOCQ4EzglOCU4Jzg5OCo4TzgsOGM4Ljh3OC04hzgtOJM4KjicOCY4ijgeOM44GzjpOBs49jgbOAU5GzgXORs4KzkbOEE5GjhSORw4XjkeOGg5IDh0OSI4fTkjOIs5JjiOOUE4VzmCOIE5TDipOTU4hDk2OIw5ODipOTc4tjk2OMI5NjjMOTc45Tk4OAE6OjgaOjw4LTo+OEI6OzgBNjo4FTY6OCU2Ojg0Njo4QTY6OE02OjhbNjo4azY6OH42OTiVNjg4rjY2OMc2NTjcNjQ48DYzOAA3MDgONy04HzcrODE3KzhENyo4WDcqOG03KjiENyo4nTcqOLg3KjjVNyo49DcqOAo4KzgbOCs4LDgtOD44LzhRODI4ZTg1OHk4NjiKODc4mzg2OK44Lji6OCY40jgiOOk4Ijj4OCE4CDkhOBk5ITgtOSA4QzkfOFM5IjheOSU4aTknOHU5KTh+OSs4izktOI45RzhpOXk4hjlROJs5PjiHOUE4jzlCOKc5QTi0OUA4vTk/OMc5QTjiOUM4/jlFOBc6SDgsOks4QDpFOAk2RTgaNkU4KDZFODQ2RTg/NkY4STZFOFk2RDhpNkM4fjZDOJw2QjjANkE42TY/OO02Pzj9Nj44DDc5OBo3NjgrNzM4PTcyOFE3MThmNzE4fTcxOJQ3MjiuNzI4yDcyOOQ3MTgBODE4ETgxOCE4MjgyODI4Qzg0OFQ4NzhlODw4ejg+OI04QDiiOD44uTg2OMk4LjjYOCo45zgpOPg4KDgJOSg4GzkoOC85JzhEOSY4VjkoOGE5KzhrOS44djkwOH45MjiLOTY4jzlMOHQ5ajiJOVQ4kjlOOIw5SziROUw4qjlLOLM5Sji6OUg4wTlLON45TTj8OVA4FDpTOCg6Vzg9OlI4BjZOOB42TzgqNlA4MzZQOD42UDhJNk84VzZOOGg2TTiBNkw4pDZLOMg2TTjrNkw4+zZMOAs3SDgWN0M4JTc/ODY3PThGNzs4Wzc6OG83OTiHNzk4njc6OLk3OjjVNzo48Dc6OAc4OTgWODg4Jzg4ODY4ODhHODk4Vjg9OGY4QTh5OEQ4jzhFOKU4Qzi7ODs4zTgzONo4MDjlOC84+DgvOAo5LzgcOS84MDkuOEc5LDhZOS84ZDkyOG05NDh3OTc4gDk4OIw5PTiQOVA4iTlmOI05WjiSOVY4jzlTOJQ5UzioOVI4sTlROLc5UDi8OVM43TlWOPk5WjgROl44JTpiODg6YDgBNl44GjZeOCU2XjgvNl04OjZcOEY2WzhVNlk4ZzZWOII2UzilNlE41zZSOPI2UjgLN1I4EzdSOBw3TTgrN0g4PzdGOFE3RThlN0M4eTdDOJA3QjioN0I4wzdCON43Qjj6N0I4DDhBOBs4QDgrOD84Ojg/OEo4PzhZOEI4aThFOHs4SDiPOEg4pzhGOLo4QDjKODk41zg3OOQ4Nzj3ODc4CTk3OBw5NjgxOTU4SDkzOF45NThmOTg4bzk7OHg5PjiAOUA4jjlIOJA5UDiROVo4kTlcOJQ5WziWOVo4oTlaOKo5WTixOVg4tzlaOMg5WzjcOV84+DlkOA86aDgiOm04NTpvOP01bjgWNm04ITZsOCs2ajg3Nmc4RDZlOFM2YjhkNl84fTZcOJ42WDjNNlg4+DZZOAc3VTgYN1c4IDdYOCo3UzhAN044WjdNOHE3TDiEN0w4mjdMOLI3TDjLN0w45jdLOAE4SjgQOEo4HjhJOC04Rzg9OEU4TThFOFw4RzhsOEg4ezhKOI04SjijOEg4uDhDOMc4PzjUOD444jg/OPU4PzgIOT84HDk+ODE5PThIOT04WTk8OGU5PzhvOUI4eDlFOIE5SjiIOU84kjlWOJQ5XTiUOV84mTlfOJ85XzimOV84rDleOLM5YDi/OWI40TllOOQ5aTj6OW44DjpyOCE6dzgzOn049zV8OAw2ejgaNng4JzZ2ODM2czhBNnA4TzZtOGA2aTh2NmY4lzZiOME2ZTjoNmQ4/jZiOAw3YDgaN184JzdeODk3WThfN1c4fjdWOJI3VjinN1Y4vTdVONQ3VTjvN1U4BThUOBM4UzghOFI4MDhQOD84TjhPOEs4XjhMOG44TTiAOE04ijhOOJ44TDiwOEg4wzhGONA4RDjeOEc48jhIOAU5SDgZOUc4LjlGOEM5RThWOUU4ZDlGOG45STh4OUw4gTlROIc5VziNOVw4kDlhOJQ5YzibOWQ4ojlkOKg5ZDivOWY4uTlpOMc5bDjYOW846jlzOPs5eDgNOn04HzqCODA6ijjvNYk4BDaGOBU2gzgkNoE4MjZ+OEA2ezhONng4XzZ0OHg2cTiXNm44vDZsONg2azjyNms4AzdqOA83aDgcN2U4OzdjOGY3YjiGN2A4oDdgOLQ3YDjJN2A43zdfOPc3XzgJOF04FjhcOCQ4WzgyOFk4QThXOFA4VjhgOFI4bzhROH44UjiLOFE4nDhQOK44Tji9OEw4yzhOON04UDjvOFE4AzlROBY5UTgqOVA4PjlPOFE5TjhiOU84bjlQOHY5UziAOVg4hzleOIs5YziPOWY4lDlpOJs5aTikOWo4rDlsOLQ5bzi/OXI4zTl1ONw5ejjsOX44/TmDOA06iDgeOo04LjqVOOo1lDj/NZE4EzaOOCQ2izg0Nog4QTaGOE82gzhlNoA4gDZ6OJ02dzjANnQ42jZzOPA2cjgAN3E4DjdwOCE3bThEN204bjdtOJE3bDiqN2s4wjdrONU3azjqN2o4ADhqOAw4aDgZOGc4JzhmODU4ZDhDOGI4UjhgOGE4XjhwOFo4fjhaOI04WTidOFo4rThZOLw4WTjMOFs43DhcOO44XDgAOVw4EzlcOCY5Wzg4OVo4SjlZOFw5WDhsOVk4dzlaOH45XziFOWU4iTlqOI05bTiUOW84nTlxOKg5cziwOXU4uTl4OMQ5fDjROYA43zmEOO45iTj9OY44DTqTOB06mDgtOqA45jWfOPw1nDgSNpk4JjaWODY2kzhFNpA4VTaNOGs2iDiINoQ4sTaBOMo2fzjhNn048zZ8OAM3ezgVN3k4KDd4OEw3eDh3N3g4lzd3OLM3dzjKN3Y44Dd2OPM3dTgEOHQ4Dzh0OBw4cjgpOHE4NzhvOEU4bjhTOGw4YjhqOHE4aDh/OGc4jzhnOJ44ZjiuOGY4vThmOM04ZzjcOGg47DhoOP44aDgPOWc4ITlmODM5ZThEOWQ4VDlkOGQ5YzhxOWU4fDlnOIM5bTiHOXI4jDl2OJU5dzifOXo4qTl8OLI5fzi9OYM4yDmGONQ5ijjiOY848DmTOP45mTgNOp44HDqjOCs6qjjlNak4/DWmOBU2ozgpNqE4OzaeOEw2mzheNpc4czaTOIs2kTivNo440jaMOOY2ijj3Nog4CDeHOBo3hjg0N4U4WDeFOH03hTifN4Q4uzeDONI3gjjmN4E4+jeAOAc4gDgSOH84Hjh9OCs4fDg4OHs4Rjh5OFQ4dzhiOHY4cTh0OIA4cziPOHI4nzhxOK44cTi+OHI4zThyON44czjtOHI4/DhyOA45cjgeOXI4LzlxOD85cThOOXA4XTlwOGo5cTh2OXM4fjl3OIU5fDiNOX84lzmBOKE5hDirOYY4tTmKOMA5jTjLOZE41jmVOOQ5mjjxOZ44/zmjOAw6qTgaOq44KDq0OOY1sjj+NbA4GDauODA2qzhENqk4VzanOGw2pDh+Np44lTaeOLQ2mzjXNpk47DaXOP02ljgMN5U4IjeUODs3kzhaN5I4gDeSOKA3kTi7N5A40zeOOOg3jTj8N4w4CTiLOBQ4iTggOIg4LDiHODk4hThGOIQ4VDiCOGM4gThxOIA4gDh+OI84fjifOH04rzh8OL44fDjOOH043jh9OO44fDj+OH04Djl8OB05fDgtOX04Ozl9OEk5fThXOX04ZTl+OHE5gDh7OYM4hTmGOI45iTiZOYw4ozmOOKw5kTi2OZQ4wTmYOMw5nDjYOaA45TmlOPE5qTj+Oa44Czq0OBg6uTglOr046TW7OAI2uTgfNrc4ODa1OE82tDhjNrM4eTaxOI42rjiiNqw4wjapOOE2pjjyNqQ4ADejOA83ojgeN6E4OjefOF03nziBN544ozedOLs3mzjTN5o45zeYOPw3lzgIOJU4FDiUOCA4kjgtOJE4OjiQOEc4jjhVOI04YziMOHE4ijiAOIk4jziIOJ84hzivOIc4vziGOM84hjjfOIY47ziGOP84hjgPOYY4HzmGOC05hzg6OYk4RjmJOFQ5iThhOYs4bTmNOHk5jziEOZE4jzmUOJk5ljijOZk4rTmcOLc5nzjCOaM4zTmnONk5qzjlOa848Tm0OP05uTgKOr44FjrDOCI6xTjuNcQ4CDbCOCU2wDhANr84WTa+OHA2vTiHNrw4nja6OLY2uDjRNrU45zayOPc2sDgDN684DTevOB03rzgxN604VTesOHw3qjieN6k4uDenOM83pTjkN6M4+TeiOAc4oDgTOJ44IDidOC04mzg6OJo4RziYOFU4lzhjOJY4cjiVOIE4lDiQOJM4nziSOK84kTjAOJA40DiQOOA4jzjxOI84ATmPOBE5jzggOY84MDmSODo5lDhEOZQ4UjmVOF85lzhrOZk4djmbOII5nTiNOZ84mDmhOKI5pDitOac4tzmqOMI5rTjNObI42Tm2OOQ5ujjwOb84+znDOAc6yDgSOs04HTrOOPQ1zDgPNso4LTbJOEk2xzhjNsc4ezbGOJM2xjisNsU4xzbBON82vjjuNrw4+Ta7OAI3uTgLN7k4FDe5OCY3uThON7c4dje1OJk3szi0N7E4yzevOOA3rTj1N6s4BjiqOBI4qDgfOKc4LDilODk4pDhHOKI4VTihOGM4oDhyOJ84gTieOJA4nTigOJw4sDibOMA4mjjQOJo44DiZOPE4mTgBOZg4EjmYOCI5mTgvOZs4OjmcOEc5nDhUOZ84XzmiOGk5pDh1OaY4gDmoOIs5qjiWOas4oTmtOKw5sTi3ObQ4wTm3OMw5uzjXOb844jnEOO05yDj4Oc04AzrROA461jgZOtY4/TXUOBg20jg1NtA4UjbPOG02zziFNs44nTbNOLQ2zDjTNsg46DbGOPA2xDj4NsM4ATfCOAc3wTgQN8E4GzfBOEU3wDhxN744lTe8OLA3ujjHN7g43De3OPI3tTgEOLM4ETiyOB44sDgrOK84ODiuOEY4rDhVOKs4YziqOHI4qTiBOKg4kTinOKA4pjiwOKU4wDilONA4pDjgOKQ48TijOAE5ozgROaM4IDmjOC45pDg6OaU4RzmnOFM5qThdOaw4aTmuOHM5sDh/ObI4ijm0OJU5tjigObg4qzm7OLU5vjjAOcE4yjnFONU5yDjfOc046jnROPU51Tj/Odo4CTrfOBM63TgFNts4IDbZOD022DhaNtY4dTbVOI421TilNtQ4vTbSONw20DjmNs047zbKOPg2yTj/Nsk4BzfJOBA3yTglN8k4PjfIOG83xjiTN8U4rjfEOMQ3wjjZN8A47ze+OAM4vDgPOLs4HDi5OCo4uDg4OLc4Rji2OFQ4tThjOLQ4cjizOIE4sjiQOLE4nziwOK84sDi/OK84zzivON84rjjwOK44ADmtOA85rjgeOa44LDmvODk5sDhFObI4UTm0OFw5tjhnObg4cjm6OH05vDiIOb04kznAOJ45wjipOcQ4sznHOL45yjjIOc440jnSON051jjnOdo48TneOPs54zgEOuc4DjrkOA424jgoNuA4RjbeOGE23Th8Ntw4lDbbOKs22TjBNtg43TbVOOk20Tj2Ns84+jbOOP82zjgHN884GTfQOCs30DhLN884cjfOOJI3zDisN8s4wjfKONc3yDjtN8c4AjjFOA84xDgbOMI4KTjBODc4wDhFOL84VDi+OGI4vThxOL04gDi8OI84uzifOLs4rzi6OL84ujjPOLk43ji5OO44uDj+OLg4DTm4OBs5uTgpObo4Njm7OEI5vThOOb44WjnAOGU5wjhwOcQ4eznFOIY5xziROck4nDnLOKc5zjixOdE4uznUOMU51zjPOdo42TneOOM54jjtOeY49jnrOP857zgIOus4GDboODM25jhONuU4aTbjOIM24jiaNuA4sDbfOMQ23DjfNtk47jbTOPo20Tj7NtE4/TbSOAI31DgdN9U4NTfWOFU31Th1N9U4kTfUOKo30jjBN9E41jfQOOs3zzgBOM44DTjNOBo4yzgoOMo4NjjKOEQ4yThTOMg4YTjHOHA4xziAOMY4jzjFOJ44xTiuOMQ4vjjEOM04xDjdOMQ47DjDOPw4wzgLOcQ4GTnEOCY5xTg0OcY4QDnHOEw5yThYOco4YznMOG45zjh5Oc84hDnROI850ziaOdU4pDnXOK452ji4Odw4wjngOMw54zjWOeY43znqOOg57jjxOfM4+jn3OAM68TghNu84PDbtOFY26zhvNuk4iDbnOKE25ji1NuQ4xjbhON423DjwNtk49jbUOPw20zj9NtQ4/zbZOB032zg9N9w4WzfcOHc32ziRN9o4qDfaOL432TjUN9g46TfXOAA41jgMONU4GTjUOCY41Dg0ONM4QzjSOFI40jhhONE4cDjQOH840DiOOM84nTjPOK04zzi8OM44zDjOONs4zjjrOM44+jjOOAg5zzgWOc84JDnQODE50Tg+OdI4SjnTOFU51ThhOdY4bDnXOHc52TiCOds4jDncOJc53jihOeA4rDnjOLU55Ti/Oeg4yTnrONI57zjbOfI45Dn2OOw5+jj1Of84/Tn3OCg29ThDNvM4XDbwOHQ27ziMNu04ojbrOLc26TjKNuc43DbjOO423zj4Nts4/TbWOP422jgQN904IDfhOEE34jhdN+I4dzfiOI834TilN+E4vDfgONE34DjoN984/zfeOAw43jgYON04JTjcODM43DhCONw4UTjbOGA42zhvONo4fjjaOI042jicONk4qzjZOLs42TjKONk42jjZOOk42Tj3ONk4BjnZOBQ52jghOdo4LjnbODo53DhHOd44UjnfOF454DhpOeE4dDnjOH855DiKOeY4lDnnOJ456TioOew4sjnuOLw58TjFOfM4zjn2ONY5+jjfOf045zkBOe85BTn3Of04Lzb6OEk2+ThjNvY4eDb0OI428jijNvE4uDbvOMo27TjcNus47TbnOPo24jgDN+I4DDfhOBc35TgtN+c4RjfoOF436Th1N+k4jDfoOKI36Di5N+g4zzfnOOY35zj9N+c4CzjmOBc45jgkOOU4MjjlOEE45ThQOOU4XzjkOG445Dh9OOQ4jDjjOJs44ziqOOM4ujjjOMk44zjXOOM45jjjOPU45DgDOeQ4ETnkOB455TgrOeY4NznnOEM56DhPOek4WznqOGY56zhxOe04fDnuOIc57ziROfE4mznzOKU59DivOfc4uDn5OME5+zjKOf440jkBOdo5BDniOQg56jkMOfI5Ajk2NgA5Tjb9OGU2+zh6Nvk4kDb4OKQ29ji4NvU4yjbzONs28TjrNu44+jbqOAY36TgSN+o4ITfsODQ37jhIN+84XjfvOHQ37ziJN+84nzfvOLY37zjMN+844zfvOPs37zgKOO84FjjvOCM47zgxOO84PzjuOE847jheOO44bTjuOHw47jiLOO44mjjtOKk47Ti4OO04xzjtONU47TjkOO448jjuOAA57jgOOe84GznwOCg58Dg0OfE4QTnyOEw58zhYOfQ4Yzn1OG459jh5Ofg4hDn5OI45+jiYOfw4ojn9OKw5/zi1OQE5vjkDOcY5BTnOOQg51jkLOd05DjnlORI57DkHOT02BDlTNgI5ZzYAOXw2/jiQNv04ozb7OLY2+jjINvg42Tb3OOk29Dj4NvI4BjfwOBQ38TgjN/M4NTf0OEg39ThcN/Y4cTf2OIc39zicN/c4szf3OMk39zjgN/c4+Df4OAg4+DgVOPg4Ijj4ODA4+Dg+OPg4TTj4OFw4+DhrOPg4ejj4OIk4+DiYOPg4pzj4OLY4+DjFOPg40zj4OOI4+DjwOPk4/Tj5OAs5+TgYOfo4JTn7ODE5/Dg9Ofw4STn9OFU5/jhgOf84azkAOXY5ATmAOQI5izkDOZU5BDmeOQY5qDkHObE5CTm6OQs5wjkMOco5DznSORE52TkUOd85FznmOQs5QzYIOVc2BjlqNgU5fTYDOZA2AjmiNgA5szb/OMU2/jjWNvw45jb7OPU2+TgEN/c4Ejf4OCI3+jg0N/s4Rjf8OFo3/ThuN/44hDf+OJk3/zivN/84xjf/ON03ADn1NwA5BzgAORM4ATkhOAE5LzgBOT04ATlMOAI5WzgCOWk4Ajl5OAI5hzgCOZY4AjmlOAI5tDgCOcI4AjnROAI53zgDOe04Azn6OAM5CDkEORU5BTkiOQU5LjkGOTo5BzlGOQc5UTkIOV05CTloOQo5czkLOX05DDmHOQw5kTkNOZs5DjmlOQ85rjkQObY5Ejm/ORM5xjkVOc05FznUORk52zkcOeE5DjlINgw5WjYKOWw2CTl9Ngg5jjYGOZ42BTmwNgQ5wTYDOdI2AjniNgE58TYAOQE3/zgQN/84IDcBOTE3AjlENwM5VzcEOWs3BTmANwY5lTcGOaw3BznDNwg52jcIOfI3CTkFOAk5EjgKOR84CjktOAo5OzgLOUo4CzlYOAs5ZzgMOXY4DDmFOAw5lDgNOaI4DDmxOAw5wDgNOc44DTncOA056jgNOfc4DjkFOQ45EjkPOR45EDkrORA5NzkROUI5EjlOORI5WjkTOWU5EzlvORQ5ejkVOYQ5FTmOORY5mDkXOaI5FzmrORg5szkZObs5GjnDORs5yjkcOdA5HjnWOSA53DkROUw2DzlcNg45azYNOXs2DDmKNgs5mjYLOas2Cjm8Ngk5zTYIOd02CDntNgY5/TYGOQw3BzkcNwk5LTcKOUA3CzlUNww5aDcNOXw3DTmRNw45pzcPOb43EDnWNxE57jcROQM4EjkQOBM5HTgTOSs4FDk6OBQ5SDgVOVY4FTllOBY5dDgWOYI4FjmROBY5oDgWOa84Fzm9OBc5yzgXOdk4GDnnOBg59DgZOQE5GTkOORk5GzkaOSc5GzkzORs5PzkcOUs5HDlWOR05YTkdOWw5Hjl3OR45gTkeOYs5HzmVOR85nzkfOag5HzmwOSA5uDkgOcA5IDnGOSE5zTkiOdI5JDnXORM5UDYSOVw2ETlqNhE5dzYQOYY2EDmVNhA5pjYPObY2DznGNg451zYOOec2DTn3Ng05CDcOORg3EDkpNxE5OzcTOU83FDljNxU5eDcWOY03FjmjNxc5uTcYOdE3GTnpNxo5ATgbOQ44HDkcOB05KTgdOTc4HjlFOB85VDgfOWM4IDlxOCA5gDghOY44ITmdOCE5rDghObo4ITnJOCI51jgiOeQ4IjnxOCM5/jgjOQs5JDkYOSQ5JDklOTA5JTk8OSY5SDkmOVM5JzleOSc5aTknOXQ5Jzl+OSc5iDknOZI5JzmcOSc5pTknOa05Jzm1OSY5vTkmOcQ5JjnKOSY5zzkoOdM59DoLNPQ6FjT1OiY09jo6NPc6UDT4Omc0+TqANPs6mzT8Orc0/TrUNP068zT+OhI1/joyNf86UjX/OnM1ADuUNQA7tTUAO9c1ADv4NQA7GTYAOzo2/zpbNv86fDb/Opw2/jq9Nv463Tb9Ovw2/DocN/s6Ozf7Olk3+jp3N/k6lDf4OrE39zrNN/Y66Tf1OgI49DoQOPM6HTjxOio48Do3OO86RDjtOlA47DpcOOs6aDjqOnQ46DqAOOc6izjmOpY45TqgOOQ6qzjjOrU44zq+OOI6yDjhOtE44TraOOA64jjfOus43zrzON46+jjdOgI53ToJOdw6DzncOhU52zoaOds6Hjn1OgQ09zoRNPg6ITT6OjU0+zpKNP06YjT+Ons0ADuWNAE7sjQCO880AzvuNAM7DTUEOy01BDtNNQU7bjUFO481BTuwNQY70jUFO/Q1BTsVNgU7NjYFO1c2BTt4NgU7mTYEO7k2BDvaNgM7+TYCOxk3Ajs4NwE7VjcAO3U3/zqSN/46rzf9Osw3/DroN/s6Ajj6Og84+TocOPg6KTj2OjY49TpDOPQ6TzjyOlw48TpnOPA6czjuOn847TqKOOw6lTjrOqA46jqqOOo6tDjpOr446DrHOOc60TjmOto45TriOOU66jjkOvM44zr6OOI6AjnhOgk54DoPOd86FTneOhs53TofOfg68TP6Ogg0/DoaNP46LjQAO0Q0ATtcNAM7dTQFO5A0BjusNAc7yjQIO+g0CTsHNQk7JzUKO0g1CjtoNQs7ijULO6s1CzvNNQs77zULOxE2CzsyNgs7VDYLO3U2CjuWNgo7tjYKO9c2CTv2Ngg7FjcIOzU3BztUNwY7cjcFO5A3BDutNwM7yjcCO+c3ATsBOAA7Djj/Ohw4/jopOPw6Njj7OkI4+jpPOPg6Wzj3Omc49jpzOPU6fjj0Ooo48jqVOPE6nzjxOqo48Dq0OO86vjjuOsc47TrROOw62jjrOuI46jrrOOk68zjoOvo45zoCOeY6CTnkOhA54zoWOeE6HDngOiI5/DrWM/46+jMAOxA0AzslNAU7OzQHO1Q0CDtuNAo7iTQLO6Y0DDvDNA474jQOOwE1DzsiNRA7QjUQO2M1ETuFNRE7pzURO8k1ETvrNRE7DTYROy42ETtQNhE7cTYRO5I2EDuzNhA71DYPO/Q2DzsUNw47MzcNO1I3DTtxNww7jjcLO6w3CjvJNwk75TcIOwA4BjsOOAU7GzgEOyg4Azs1OAE7QjgAO044/zpbOP06Zzj8OnM4+zp+OPo6ijj5OpU4+DqfOPc6qjj2OrQ49Tq+OPQ6yDjzOtE48jraOPE64zjwOus47jrzOO06+zjsOgM56joKOek6ETnnOhg55TofOeM6JTkAO7gzAzvfMwU7BDQIOxo0CjsyNAw7SzQOO2Y0DzuBNBE7njQSO7w0EzvcNBQ7+zQVOxs1Fjs9NRY7XjUXO4A1FzuiNRc7xDUXO+Y1FzsJNhc7KjYXO0w2FztuNhc7jzYXO7A2FjvRNhY78jYVOxE3FDsxNxQ7UDcTO283EjuNNxE7qjcQO8c3DzvkNw47ADgNOw44DDsbOAo7KDgJOzU4CDtCOAY7TjgFO1o4BDtnOAM7cjgCO344ATuJOP86lTj+OqA4/TqqOPw6tDj7Or44+jrIOPk60Tj4Oto49zrjOPY67Dj0OvQ48zr8OPE6BDnvOgw57ToTOes6GznpOiI55zooOQU7mDMIO8IzCzvuMw07DjQPOyc0ETtBNBM7XDQVO3k0FzuWNBg7tTQZO9U0Gjv1NBs7FjUcOzc1HDtYNR07ezUdO501HTvANR474jUeOwQ2HjsmNh47SDYeO2o2HTuMNh07rTYdO842HDvvNhs7DzcbOy83GjtONxk7bTcZO4s3GDupNxc7xjcWO+M3FDv/NxM7DTgSOxs4ETsoOA87NTgOO0E4DTtOOAw7WjgKO2Y4CTtzOAg7fjgHO4o4BjuVOAU7oDgEO6s4Azu1OAI7vzgBO8k4ADvSOP462zj9OuQ4/DrtOPo69jj4Ov449joGOfU6DjnyOhY58DodOe46JTnrOiw5Czt1Mw07ozMQO9EzEzsCNBU7GzQXOzY0GTtTNBs7cDQcO440HjutNB87zjQgO+40ITsPNSI7MTUjO1M1Izt2NSQ7mDUkO7s1JDvdNSQ7/zUkOyI2JDtENiQ7ZzYkO4k2JDuqNiM7zDYjO+02IjsNNyE7LTchO0w3IDtrNx87ijceO6g3HTvFNxw74jcbO/83GjsNOBk7GzgXOyg4Fjs1OBU7QjgTO044EjtaOBE7ZzgQO3M4Dzt/OA47ijgNO5Y4DDuhOAs7qzgKO7Y4CTvAOAg7yjgGO9M4BTvdOAQ75jgCO+84ADv4OP46ADn8Ogk5+joROfg6GTn1OiE58jopOe86MTkQO1MzEzuDMxY7tDMYO+gzGzsPNB07KzQfO0g0ITtmNCM7hjQkO6U0JTvGNCY76DQoOwk1KDsrNSk7TTUqO3A1KjuTNSs7tjUrO9k1Kzv7NSs7HjYrO0E2KztjNis7hjYrO6c2KjvJNio76zYpOww3KDssNyg7SzcnO2o3JjuJNyU7pzckO8Q3IzvhNyI7/jchOw04HzsbOB47KDgdOzU4HDtCOBs7TjgZO1s4GDtnOBc7czgWO384FTuLOBQ7lzgTO6I4EjutOBE7tzgQO8E4DzvLOA071TgMO944CjvoOAg78TgHO/o4BDsDOQI7CzkAOxQ5/TocOfs6JTn4Oi059Do1ORY7MDMZO2IzHDuWMx87zTMhOwM0IzsgNCU7PjQnO100KTt9NCs7nTQsO740LTvgNC47AzUvOyU1MDtINTA7azUxO441MTuxNTI71TUyO/g1MjsaNjI7PTYyO2A2MjuDNjI7pTYxO8c2MTvpNjA7CTcvOyo3LztJNy47aDctO4c3LDumNys7xDcqO+E3KTv9Nyg7DTgnOxo4JTsoOCQ7NTgjO0I4IjtPOCE7XDgfO2g4Hjt0OB07gDgcO4w4HDuYOBo7ozgZO644GDu4OBc7wzgWO804FDvXOBM74DgRO+o4DzvzOA07/DgLOwU5CDsOOQY7FzkDOyA5ADspOf06MTn6Ojo5HDsMMx87QTMiO3gzJTuwMyc76zMqOxQ0LDszNC47UzQwO3Q0MTuVNDM7tzQ0O9o0NTv8NDY7HzU3O0I1NztmNTg7iTU4O601OTvRNTk79DU5Oxc2OTs6Njk7XTY5O382OTuiNjg7xDY4O+Y2NzsHNzc7KDc2O0g3NTtnNzQ7hzczO6U3MjvDNzE74DcwO/03LzsNOC47GzgtOyg4LDs2OCo7QzgpO1A4KDtcOCc7aTgmO3U4JTuBOCQ7jTgjO5k4IjukOCE7rzggO7o4HjvFOB07zzgcO9k4GjvjOBg77DgWO/Y4FDv/OBI7CTkPOxI5DDsbOQk7JDkGOy05Azs2Of86PzkiO+gyJjseMyk7WDMrO5MzLjvQMzE7BzQzOyg0NTtINDc7ajQ4O4w0OjuvNDs70TQ8O/U0PTsYNT47PDU/O2A1PzuENUA7qDVAO801QTvwNUE7EzZBOzY2QTtaNkA7fTZAO582QDvCNj875DY/OwY3PjsnNz07Rzc8O2c3OzuGNzo7pTc5O8M3ODvgNzg7/Tc3Ow04NjsbODU7KTgzOzY4MjtEODE7UDgwO104LztqOC47djgtO4M4LDuPOCs7mzgqO6Y4KDuxOCc7vDgmO8c4JTvROCM72zghO+U4HzvvOB07+TgbOwI5GDsMORY7FjkTOx85EDspOQ07MjkJOzw5BjtFOSk7wjIsO/wyMDs4MzI7dTM1O7UzODv2Mzo7HDQ8Oz40PjtgND87gzRBO6Y0QjvKNEM77jREOxI1RTs2NUY7WzVHO381RzukNUg7yDVIO+w1SDsPNkg7MjZIO1Y2SDt6Nkg7nTZHO8A2RzviNkY7BDdGOyU3RTtGN0Q7ZjdDO4Y3QjulN0E7wzdAO+A3Pzv9Nz47DTg+Oxs4PDspODs7Nzg6O0Q4OTtRODg7Xjg3O2s4NTt4ODQ7hDg0O5A4MzudODE7qDgwO7M4Lzu+OC07yTgsO9Q4KjveOCk76TgnO/I4JTv8OCI7BjkgOxA5HTsaORo7JDkXOy05FDs3ORA7QTkMO0s5MDudMjQ72TI3OxgzOjtYMzw7mjM/O90zQTsRNEM7MzRFO1Y0Rzt5NEg7nTRKO8I0SzvmNEw7DDVNOzA1TjtVNU47ejVPO581UDvDNVA75zVQOws2UDsvNlA7UzZQO3c2UDubNk87vjZPO+A2TjsCN047JDdNO0U3TDtlN0s7hTdKO6Q3STvDN0g74TdIO/43RzsNOEY7HDhFOyo4RDs3OEI7RThBO1I4QDtfOD87bDg+O3k4PTuGODw7kjg7O544OTuqODg7tjg3O8E4NTvMODQ71zgyO+E4MDvsOC479jgsOwA5KjsKOSc7FDkkOx45ITsoOR47MjkbOz05FztHORM7UTk4O3cyOzu3Mj479zJBOzozRDt+M0Y7xDNJOwU0SzsoNE07TDROO3A0UDuVNFE7ujRTO980VDsFNVU7KjVVO081Vjt0NVc7mTVXO741WDvjNVg7BzZYOyw2WDtRNlg7dDZYO5g2Vzu7Nlc73jZWOwA3VjsiN1U7QzdUO2Q3UzuEN1I7pDdSO8I3UTvgN1A7/jdPOw44TjscOE07KjhMOzg4SztGOEo7UzhIO2A4RzttOEY7ejhFO4c4RDuUOEM7oDhCO6w4QDu4OD87wzg9O884PDvZODo75Dg4O+84Njv5ODQ7BDkxOw45LzsZOSw7IzkpOy05Jjs4OSI7QjkeO0w5GjtXOT87UjJDO5QyRjvXMkk7HTNMO2MzTjuqM1A78jNTOx00VDtDNFY7aDRYO400WTuzNFo72TRbO/80XDskNV07SjVeO241XzuVNV87ujVfO981YDsENmA7KTZgO042YDtxNmA7lTZfO7k2XzvcNl47/zZeOyA3XTtCN1w7YzdbO4M3WjujN1o7wjdZO+A3WDv+N1c7DjhWOxw4VTsrOFQ7OThTO0c4UjtUOFE7YThQO244Tzt8OE07iThMO5Y4SzuiOEo7rjhIO7o4RzvGOEU70ThEO904QjvoOEA78jg+O/04PDsIOTo7Ezk3Ox45NDsoOTE7MzkuOz45KjtIOSY7UzkiO145RzsvMks7czJOO7gyUTv/MlQ7SDNWO5EzWTvbM1s7EzRcOzk0XjtfNGA7hTRhO6s0YjvSNGM7+TRkOx41ZTtFNWY7ajVmO5A1Zzu2NWg72zVoOwA2aDsmNmg7SjZoO242aDuTNmc7tzZnO9s2Zzv9NmY7HzdlO0E3ZTtiN2Q7gjdjO6I3YjvBN2E74DdhO/43YDsOOF87HDheOys4XTs5OFw7RzhbO1U4WjtiOFg7cDhXO304VjuKOFU7lzhTO6Q4UjuwOFE7vDhPO8g4TjvUOEw74DhLO+s4STv3OEc7AjlFOw05QjsZOUA7JDk9Oy45Ojs6OTY7RDkzO085LztaOSs7ZTlQOwwyUztTMlc7mzJZO+MyXDsvM187ejNhO8UzYzsJNGU7MDRmO1Y0aDt9NGk7pDRqO8s0azvxNGw7GDVtOz81bjtmNW87izVvO7I1cDvXNXA7/DVwOyI2cDtHNnA7bDZwO5A2cDu0Nm872DZvO/s2bjseN247QDdtO2E3bDuCN2w7oTdrO8E3ajvgN2k7/jdpOw44aDsdOGc7KzhmOzo4ZDtIOGM7VjhiO2Q4YTtxOGA7fzhfO4w4XjuZOFw7pjhbO7M4Wju/OFg7zDhXO9g4VTvjOFQ77zhSO/s4UDsHOU47EzlLOx45STspOUY7NTlCO0A5PztLOTw7Vjk4O2E5MzttOVk76jFcOzQyXzt9MmI7xzJlOxUzZztjM2k7sDNrO/0zbTsmNG87TjRwO3U0cTucNHM7xDR0O+s0dTsSNXU7OTV2O2A1dzuHNXc7rTV4O9M1eDv4NXg7HjZ4O0M2eDtpNng7jTZ4O7I2eDvWNnc7+TZ3Oxw3djs/N3Y7YDd1O4E3dDuhN3Q7wDdzO+A3cjv+N3E7DjhwOx04bzssOG47OzhtO0k4bDtXOGs7ZThqO3M4aTuAOGg7jjhmO5s4ZTuoOGQ7tThiO8I4YTvPOGA72zheO+c4XTv0OFs7ADlZOws5VzsXOVQ7IzlSOy85Tzs7OUw7RjlIO1E5RTtdOUE7aDk9O3Q5YjvIMWU7FDJoO2AyazuuMm07/TJwO0wzcjucM3Q76zN2Ox00dztFNHk7bTR6O5U0ezu9NHw75TR9Oww1fjszNX47WzV/O4I1gDupNYA7zzWBO/U1gTsaNoE7QDaBO2U2gTuKNoE7rzaAO9M2gDv3NoA7Gzd/Oz03fjtfN347gDd9O6A3fTvAN3w74Dd7O/83ejsPOHk7Hjh4Oy04dzs7OHY7Sjh1O1g4dDtmOHM7dDhyO4I4cTuPOG87nThuO6o4bTu4OGw7xThqO9I4aTveOGc76zhmO/c4ZDsEOWI7EDlgOxw5XTsoOVs7NDlYO0A5VTtMOVI7VzlOO2M5SjtvOUY7fDlrO6gxbjv2MXE7RTJ0O5UydjvmMnk7NjN7O4czfTvZM347FTSAOz00gTtlNII7jjSEO7Y0hTveNIU7BzWGOy41hztWNYg7fjWIO6Q1iTvLNYk78jWJOxg2iTs9Nok7YjaJO4g2iTutNok70jaJO/Y2iDsZN4g7PDeHO143hzt/N4Y7oDeGO8A3hTvgN4Q7/zeDOw84gjseOIE7LTiAOzw4fztKOH47WTh9O2c4fDt1OHs7gzh6O5E4eTufOHg7rTh2O7o4dTvHOHM71ThyO+E4cTvuOG87+zhtOwc5azsUOWk7IDlnOyw5ZDs5OWI7RTlfO1E5XDtdOVg7aTlUO3Y5UDuDOXU7ijF4O9oxezssMn07fjKAO9EygjsjM4Q7dTOGO8czhzsNNIk7NjSKO140izuHNIw7sDSNO9k0jjsBNY87KTWQO1E1kDt4NZE7oDWRO8c1kjvuNZI7FTaSOzs2kjtgNpI7hTaSO6s2kjvQNpI79TaROxg3kTs7N5A7XTeQO383jzugN447wTeOO+E3jTsAOIw7DziLOx44ijstOIk7PDiIO0s4hztZOIY7aDiFO3Y4hDuFOIM7kziCO6E4gTuvOIA7vDh+O8o4fTvXOHs75Th6O/I4eTv+OHc7Czl1Oxg5czskOXE7MTluOz05bDtKOWk7VjlmO2M5YjtvOV87fDlaO4k5fztvMYI7wTGFOxQyhztoMok7vDKLOxAzjTtkM487uDOROwU0kjsuNJM7WDSUO4E0lTuqNJY70zSXO/w0mDslNZk7TTWZO3Q1mjucNZo7xDWaO+s1mzsSNps7OTabO182mzuENps7qTaaO882mjvzNpo7FzeZOzo3mTtdN5k7fzeYO6E3lzvBN5c74TeWOwA4lTsPOJQ7HziTOy04kjs8OJE7SziQO1o4kDtpOI87dziOO4Y4jTuUOIw7ojiKO7E4iTu+OIg7zDiHO9o4hTvoOIQ79TiCOwI5gTsPOX87HDl9Oyg5ezs1OXk7Qjl2O085cztcOXA7aTltO3U5ajuCOWU7jzmJO1QxjDupMY87/jGRO1MykzupMpU7/jKXO1UzmDuoM5o7/DObOyg0nDtRNJ47ezSfO6Q0nzvONKA7+DShOyA1ojtJNaI7cTWjO5k1ozvANaM76DWjOw82pDs2NqQ7XDakO4I2ozuoNqM7zTajO/I2ozsWN6I7OTeiO103ojt/N6E7oDegO8E3oDvhN587ADieOxA4njsfOJ07LjicOz04mztMOJo7WjiZO2o4mDt4OJg7hziWO5Y4lTukOJQ7sjiTO8A4kjvOOJE73DiPO+o4jjv4OIw7BTmLOxI5iTsfOYc7LDmFOzk5gztGOYE7Uzl+O2A5eztuOXg7ezl1O4g5cTuVOZQ7PjGXO5QxmTvqMZs7QTKdO5cynzvsMqE7RDOiO5kzpDvvM6U7IjSmO0w0pzt1NKg7nzSpO8k0qTvyNKo7GzWrO0U1qzttNaw7lTWsO701rDvlNaw7DTasOzQ2rDtbNqw7gTasO6c2rDvMNqw78TasOxU3qzs5N6s7XDerO383qjugN6k7wTepO+E3qDsAOKg7EDinOx84pjsuOKU7PTilO0w4pDtbOKM7ajiiO3k4oTuIOKA7lzifO6U4nju0OJ07wjicO9A4mzveOJo77DiYO/o4lzsIOZU7FTmUOyM5kjswOZA7PTmOO0o5jDtYOYk7ZTmHO3M5hDuAOYA7jTl9O5s5oDspMaI7fzGkO9cxpjsvMqg7hzKpO94yqzs0M6w7izOtO+EzrzsbNLA7RjSwO3A0sTuaNLI7xDSyO+00szsXNbQ7QDW0O2o1tTuTNbU7uzW1O+M1tTsKNrU7Mja1O1k2tTt/NrU7pja1O8s2tTvwNrU7FDe1Ozg3tDtbN7Q7fjezO6A3szvBN7I74TeyOwE4sTsQOLA7IDiwOy84rzs+OK47TTiuO1w4rTtrOKw7ejirO4k4qzuYOKo7pzipO7U4qDvEOKc70jimO+A4pDvuOKM7/DiiOwo5oDsYOZ87JTmdOzM5mztBOZk7TjmXO1w5lTtqOZI7dzmQO4Q5jTuSOYk7oDmrOxQxrTtsMa87xjGxOx8ysjt3MrQ70DK1Oycztjt9M7c71TO4OxY0uTtBNLo7bDS7O5Y0uzvANLw76jS8OxM1vTs9Nb07ZzW+O5A1vju4Nb474TW+Owk2vjsxNr47WDa+O382vjukNr47yja+O/A2vjsUN747ODe9O1s3vTt+N707oDe8O8E3vDvhN7s7ATi7OxE4ujsgOLk7Lzi5Oz44uDtOOLg7XTi3O2w4tjt7OLY7iji1O5k4tDunOLM7tjiyO8U4sTvTOLA74jivO/A4rjv+OK07DDmrOxo5qjsoOak7NjmnO0Q5pTtSOaM7YDmhO205nzt7OZw7iTmZO5c5ljulObY7ATG4O1sxuju1Mbs7EDK9O2kyvjvBMr87GjPBO3MzwjvLM8I7EjTDOz00xDtoNMQ7kzTFO700xTvnNMY7ETXGOzs1xztkNcc7jjXHO7c1xzvfNcc7CDbHOy82xztWNsc7fTbHO6Q2xzvKNsc77zbHOxQ3xzs4N8c7WzfGO303xjufN8Y7wTfFO+E3xTsBOMQ7EDjEOyA4wzswOMM7PzjCO044wjteOME7bTjBO3w4wDuLOL87mTi/O6g4vju3OL07xTi8O9Q4uzvjOLo78Ti5O/84uDsNObc7HDm2Oyo5tDs4ObM7RzmxO1U5rztjOa07cTmrO385qTuNOac7mzmkO6k5wzvyMMQ7TTHFO6gxxzsDMsg7XTLJO7YyyjsQM8s7aTPMO8IzzTsONM07OTTOO2U0zjuQNM87uTTPO+Q0zzsPNdA7OTXQO2M10DuMNdA7tTXRO9410TsHNtE7LjbRO1U20Tt8NtE7ozbRO8k20TvvNtA7EzfQOzc30DtbN9A7fTfQO583zzvBN8874jfPOwE4zjsROM47IDjNOzA4zTs/OM07TzjMO144zDttOMs7fDjLO4s4yjuaOMo7qDjJO7c4yDvGOMg71TjHO+M4xjvyOMU7ATnEOw85wzsdOcI7LDnBOzo5vztJOb47Vzm8O2Y5uzt0Obk7gjm3O5A5tTueObI7rTnPO+Yw0DtAMdE7nDHSO/gx0ztUMtQ7rjLVOwkz1TtiM9Y7uzPXOwo01zs2NNg7YTTYO4w02Tu3NNk74jTZOww12Ts3Ndo7YTXaO4o12ju0Ndo73TXaOwY22jsuNto7VTbaO3w22juiNto7yTbaO+422jsTN9o7NzfaO1s32jt+N9k7oDfZO8E32TviN9k7ATjYOxE42DshONg7MDjXO0A41ztPONc7XzjWO2441jt9ONU7jDjVO5o41DupONQ7tzjUO8Y40zvVONI75DjSO/M40TsCOdA7EDnPOx45zjstOc07PDnMO0o5yztZOco7aDnIO3Y5xzuFOcU7kznDO6E5wTuwOds73DDcOzgx3TuVMd078DHeO0wy3zunMt87ATPgO1sz4Tu0M+E7BjThOzM04jtfNOI7ijTiO7U04zvhNOM7CzXjOzU14ztgNeM7iTXjO7I14zvbNeM7BTbkOy025DtUNuQ7ezbkO6I24zvINuM77jbjOxM34zs3N+M7WzfjO3434zugN+M7wjfjO+I34jsBOOI7ETjiOyE44jsxOOE7QDjhO1A44TtfOOE7bzjhO3444DuMOOA7mzjgO6k43zu4ON87xzjeO9Y43jvlON078zjdOwI53DsROds7IDnbOy452js9Odk7TDnYO1s51ztqOdY7eDnVO4c51DuVOdI7pDnRO7M55zvUMOg7MjHoO40x6TvqMek7RjLqO6Ey6zv8Mus7VjPrO68z6zsFNOw7MDTsO1007DuINOw7tDTtO9807TsKNe07NDXtO1417TuINe07sTXtO9s17TsDNu07LDbtO1Q27Tt7Nu07oTbtO8c27TvtNu07EjftOzc37TtbN+07fjftO6A37TvCN+074zfsOwE47DsROOw7ITjsOzE47DtBOOs7UDjrO2A46ztvOOs7fjjrO4046zucOOs7qjjqO7k46jvIOOo71zjqO+U46Tv0OOk7AznoOxI56DsgOec7LznnOz455jtNOeY7XDnlO2s55Dt6OeQ7iDnjO5c54jumOeE7tjn0O9Ew9DsuMfQ7ijH0O+Yx9TtCMvU7njL1O/oy9TtVM/Y7rjP2OwQ09jswNPY7XDT2O4c09juyNPY73jT2Owg19jszNfY7XjX2O4g19juwNfc72TX2OwM29zssNvc7VDb3O3s29zuiNvc7yDb3O+029zsRN/Y7Njf3O1o39zt9N/c7nzf2O8E39jvjN/Y7Ajj2OxE49jshOPY7MTj2O0E49jtROPY7YDj2O2849jt/OPY7jjj2O5w49TurOPU7ujj1O8k49TvYOPU75jj1O/U49TsDOfU7Ejn0OyE59DsvOfQ7Pjn0O0059DtcOfM7bDnzO3s58juJOfI7mDnxO6g58Tu4OeIIzzBTCCsxiQeHMZ4G4zG0BUAy+wScMlME+DK8A1MzRwOsM/MCBDSwAjA0fQJcNG0ChzSOArM0nwLdNNECCDUEAzM1NgNdNYoDhzXuA7A1UwTZNdoEAzZgBS029wVUNn0GezYlB6I2zAfHNkMI7DafCBE3Awk1N2gJWTfECXw3MQqfN5YKwTf7CuI3XwsBOMQLEjgZDCE4SwwxOIEMQTi4DFE47gxgOCkNbzhoDX84ow2NOOINnDghDqw4YA66OKMOyTjiDtg4JQ/mOGwP9TivDwQ59g8SOR8QITlFEC85ahA+OZIQTTm6EFw5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LjBFNCkwXDQjMHU0HjCQNBowrDQWMMk0EzDnNBAwBTUOMCU1CzBFNQowZTUIMIU1BzCmNQcwyDUGMOg1BjAJNgcwKjYIMEo2CTBqNgowizYMMKo2DTDKNhAw6TYSMAg3FTAnNxgwRTcbMGM3HjCANyEwnDclMLg3KTDTNy0w7jcyMAU4NjASODswHzhAMCw4RTA4OEowRThPMFE4VDBdOFgwaThdMHQ4YTCAOGUwizhpMJY4bDCgOG8wqjhyMLQ4dTC+OHgwxzh6MNA4fTDZOIAw4TiCMOk4hTDxOIcw+TiJMAA5izAGOY0wDDmOMBI5kDAVOUMw/DNFMA00RDAfNEIwMzQ+MEk0OjBhNDYwejQxMJQ0LjCwNCswzTQoMOs0JTAKNSMwKTUhMEk1IDBpNR8wijUeMKs1HTDMNR0w7DUdMA02HjAtNh8wTTYgMG42ITCNNiMwrjYlMM02JzDsNiowCzctMCo3MDBHNzMwZTc2MII3OjCeNz0wujdBMNU3RTDwN0owBThOMBI4UzAgOFgwLThdMDk4YjBGOGcwUjhsMF44cDBqOHUwdTh5MIA4fTCLOIAwljiEMKA4hjCrOIkwtDiLML44jjDHOJAw0TiSMNk4lDDiOJYw6jiXMPI4mTD5OJowADmaMAc5mjANOZkwEjmWMBc5TDDyM1AwCzRRMB80UDA0NE4wSzRLMGM0SDB9NEUwmDRCMLQ0PzDRND0w7zQ6MA41ODAtNTcwTTU2MG01NTCONTQwrzU0MNA1MzDxNTQwETY0MDE2NjBRNjcwcTY5MJE2OzCxNj0w0DY/MO82QjAON0QwLDdHMEo3SzBnN04whDdSMKA3VTC8N1kw1zddMPI3YjAGOGYwFDhrMCE4cDAuOHUwOjh6MEc4fzBTOIQwXziIMGo4jDB2OJAwgTiUMIw4lzCXOJowoTidMKs4nzC1OKEwvzijMMg4pTDROKYw2jinMOM4qDDrOKkw8ziqMPo4qjACOaowCDmoMA85pTAVOaEwGjlXMOUzXDAHNF4wHTRfMDQ0XjBMNFwwZTRaMH80WDCbNFUwtzRTMNQ0UTDzNFAwEjVOMDE1TTBRNUswcTVKMJI1SjCzNUow0zVKMPQ1SzAVNkswNTZMMFU2TjB1Nk8wlTZRMLQ2VDDUNlYw8zZZMBE3XDAvN18wTTdiMGo3ZTCHN2kwojdtML43cTDZN3Uw9Dd5MAg4fjAVOIMwIjiIMC84jTA7OJEwSDiWMFQ4mzBgOJ8wazijMHc4pzCCOKowjTiuMJc4sTCiOLMwrDi1MLY4tzDAOLgwyTi5MNI4ujDbOLsw5Di7MOw4vDD0OLsw/Di7MAM5uTAKObcwETmzMBc5rjAeOWMw1zNoMAM0bDAaNG0wMzRtMEw0bTBmNGswgTRqMJ00aTC5NGcw1zRlMPY0ZDAVNWMwNDViMFU1YTB1NWAwljVgMLY1YDDXNWAw+DVhMBg2YjA5NmMwWTZkMHk2ZjCYNmgwuDZrMNc2bTD2NnAwFTdzMDI3djBQN3kwbTd8MIk3gDClN4QwwTeIMNw3jDD3N5AwCTiVMBY4mjAjOJ8wMDijMD04qDBJOK0wVTiyMGE4tjBsOLoweDi+MIM4wTCOOMQwmTjHMKM4yTCtOMswtzjMMME4zTDKOM4w1DjOMN04zjDlOM4w7jjOMPY4zTD+OMwwBjnKMA05xjAUOcIwGzm8MCI5cTDJM3Yw+zN6MBc0fTAwNH4wSjR+MGY0fjCBNH0wnjR8MLs0ezDaNHow+DR5MBg1eDA3NXcwWDV3MHg1djCZNXUwujV1MNo1djD7NXcwHDZ4MDw2eTBcNnswfDZ9MJw2fzC8NoEw2zaEMPo2hjAYN4kwNTeMMFM3kDBwN5MwjDeXMKg3mjDDN54w3zeiMPo3pzAKOKswFziwMCQ4tTAxOLowPji/MEo4xDBWOMgwYjjNMG440TB5ONQwhDjXMI842jCaON0wpDjeMK444DC4OOEwwjjiMMw44jDVOOMw3jjiMOc44jDwOOEw+DjfMAA53TAIOdowEDnXMBg50jAfOcwwJjl/MLszhjDwM4owEjSNMC00jzBINJAwZTSQMIE0kDCfNI8wvTSPMNw0jjD7NI0wGjWNMDo1jDBbNYwwezWLMJw1izC9NYsw3jWMMP81jTAfNo0wQDaPMGA2kDCANpIwoDaVML82lzDeNpkw/TacMBs3nzA5N6MwVjemMHI3qTCPN6wwqjewMMY3tDDhN7gw/De9MAs4wTAZOMYwJjjLMDI40DA/ONUwSzjaMFc43jBjOOMwbzjnMHo46jCFOO0wkDjwMJs48jCmOPMwsDj1MLo49jDEOPYwzjj3MNc49zDgOPYw6Tj1MPI49DD7OPIwAznvMAs57DAUOegwHDnjMCQ53DArOZAwrTOWMOQzmzAONJ4wKjShMEY0ojBjNKMwgTSjMKA0ozC+NKIw3TSjMP00ojAcNaIwPTWhMF01oTB+NaAwnzWgMMA1oTDhNaEwAjaiMCM2ozBDNqQwZDamMIQ2qDCjNqowwzatMOI2rzAAN7IwHje1MDw3uDBZN7swdTe+MJE3wjCtN8YwyDfKMOQ3zjD/N9MwDTjXMBo43DAnOOEwNDjmMEA46zBNOPAwWTj1MGU4+TBwOP0wfDgAMYc4AzGSOAYxnTgIMac4CTGyOAoxvDgLMcY4CzHQOAsx2TgLMeM4CjHsOAgx9TgHMf44BTEGOQIxDzn+MBc5+jAgOfQwKDnuMDE5oTCfM6gw2TOtMAk0sDAnNLMwRDS1MGI0tjCANLcwoDS3ML80tzDeNLcw/jS3MB41tzA/NbcwYDW2MIA1tjCiNbYwwzW2MOQ1tzAFNrgwJja5MEc2ujBnNrswhza9MKc2vzDGNsIw5TbEMAM3xzAhN8owPzfNMFw30DB4N9QwlDfXMK832zDLN98w5jfkMAE46DAOOO0wGzjyMCg49zA1OPwwQjgBMU44BjFaOAsxZjgPMXI4EzF9OBcxiDgaMZQ4HDGeOB4xqTggMbM4IDG+OCExyDghMdI4IDHcOB8x5TgeMe44HDH4OBoxATkYMQo5FTETORExHDkMMSU5BzEuOQAxNzm1MJEzuzDMM8AwBTTEMCM0xzBCNMkwYDTKMH80yzCfNMwwvzTMMN80zDD/NMwwIDXMMEE1zDBiNcwwgzXMMKU1zDDGNcww5zXNMAg2zTAqNs8wSjbQMGs20TCLNtMwqzbVMMo21zDoNtkwBjfcMCQ33zBCN+IwXjflMHs36TCXN+0wsjfxMM439TDpN/kwAjj+MBA4AzEdOAgxKjgNMTc4EjFDOBcxUDgcMVw4ITFnOCUxczgqMX84LTGKODAxlTgzMaA4NTGrODYxtTg3McA4NzHKODYx1Dg1Md44NDHoODIx8TgxMfs4LjEEOSwxDjkoMRc5JDEhOSAxKjkaMTM5FDE9OckwhDPPMMIz1DAANNgwIDTbMD803TBfNN8wfjTgMJ804DC/NOEw4DThMAE14TAiNeEwQzXhMGQ14TCGNeIwpzXiMMk14jDqNeIwDDbjMC025DBONuUwbjbnMI426TCuNuowzTbsMOs27zAJN/EwJzf0MEQ39zBhN/swfTf+MJk3AjG1NwYx0TcLMew3DzEEOBQxETgZMR84HTEsOCIxODgnMUU4LTFRODIxXTg3MWk4PDF1OEAxgDhEMYw4RzGXOEkxojhLMa04TDG3OE0xwjhNMcw4TDHWOEsx4ThJMes4SDH1OEUx/zhDMQg5QDESOT0xHDk5MSY5NDEvOS8xOTkpMUM53zB3M+UwtzPqMPgz7TAcNPAwPDTyMF009DB9NPUwnjT2ML809jDgNPcwAjX3MCM19zBFNfcwZjX3MIg19zCqNfcwzDX4MO01+DAPNvkwMDb6MFE2+zBxNvwwkjb+MLE2ADHQNgIx7zYEMQ03BzEqNwoxRzcNMWQ3EDGANxQxnDcYMbg3HDHUNyAx7zclMQU4KTETOC4xIDgzMS04ODE6OD0xRjhCMVI4RzFfOE0xazhSMXY4VjGCOFoxjThdMZg4YDGjOGIxrjhjMbk4YzHEOGMxzjhjMdk4YTHjOF8x7jhdMfg4WjECOVgxDTlWMRc5UjEhOU4xKzlKMTU5RTE/OT8xSjn2MGsz/DCtMwAx8DMEMRk0BjE6NAgxWzQKMXw0CzGdNAsxvzQMMeA0DDECNQwxJDUMMUY1DDFoNQ0xijUNMaw1DTHPNQ0x8DUOMRI2DjEzNg8xVDYQMXU2EjGVNhQxtDYVMdM2FzHyNhoxEDcdMS03HzFKNyIxZzcmMYM3KTGfNy0xuzcxMdc3NTHyNzoxBzg/MRQ4QzEhOEgxLjhNMTs4UjFHOFgxVDhdMWA4YjFsOGcxeDhsMYQ4cDGPOHMxmjh2MaU4eDGwOHkxuzh6McY4ejHQOHkx2zh4MeY4dTHxOHMx/DhwMQY5bjEROWsxGzloMSY5ZTExOWAxOzlcMUY5VjFROQ8xYTMUMaQzGDHnMxoxFTQdMTc0HzFaNCAxezQhMZ00ITG/NCIx4TQjMQM1IjElNSIxRzUiMWo1IzGMNSMxrzUjMdE1IzHzNSQxFTYkMTY2JTFXNiYxeDYoMZg2KTG3Nisx1jYtMfU2MDETNzIxMDc1MU03ODFqNzsxhjc/MaI3QjG+N0Yx2TdKMfU3TzEIOFMxFThYMSI4XTEvOGIxPDhnMUk4bTFVOHMxYTh4MW04fTF5OIExhTiFMZA4iTGcOIwxpziOMbI4kDG9OJAxyDiRMdM4kDHeOI8x6TiMMfQ4ijH/OIcxCjmFMRU5gjEgOX8xKzl8MTY5eDFBOXMxTDluMVg5KTFZMy0xnDMxMeAzMzETNDUxNjQ3MVg0NzF6NDgxnTQ4Mb80OTHhNDkxBDU5MSY1OTFJNTkxbDU5MY81OTGxNTkx1DU5MfY1OTEYNjkxOTY7MVo2PDF7Nj4xmzY/Mbo2QTHZNkMx+DZGMRY3SDEzN0sxUDdNMW03UDGJN1MxpTdXMcA3WzHcN18x9zdkMQk4aDEWOG0xIzhyMTA4dzE9OH0xSjiCMVY4iDFjOI0xbziSMXs4ljGGOJoxkjieMZ04oTGoOKQxszimMb44pzHKOKgx1TinMeA4pjHrOKUx9ziiMQM5nzEOOZwxGjmaMSU5lzEwOZUxPDmQMUc5jDFTOYcxXzlDMVIzRzGXM0ox2zNMMRE0TjE0NE8xWDRQMXs0UDGdNFAxwDRQMeI0UDEFNVAxJzVQMUs1TzFuNU8xkTVPMbQ1TzHWNU8x+TVPMRo2TzE8NlExXTZSMX42VDGeNlYxvTZXMdw2WjH7NlwxGTdeMTY3YDFTN2MxbzdlMYs3aDGnN2wxwzdvMd43czH5N3gxCjh8MRc4gTEkOIYxMTiMMT44kjFLOJcxWDidMWQ4ojFwOKcxfDirMYg4rzGTOLMxnzi3Mao4ujG1OL0xwDi+Mcs4vzHXOMAx4ji/Me44vjH6OLsxBjm4MRI5tjEeObMxKjmxMTU5rjFBOaoxTTmmMVo5oTFmOV4xSzNiMZIzZTHZM2YxEDRnMTQ0aDFXNGkxezRoMZ40aDHANGgx4zRoMQY1ZzEpNWYxTTVmMXA1ZjGTNWUxtjVlMdk1ZTH7NWUxHTZmMT82ZzFgNmgxgDZqMaA2bDHANm4x3zZwMf02cjEbN3MxODd1MVU3eDFxN3oxjTd9Mak3gDHEN4Qx3zeIMfo3jDELOJExGDiWMSU4mzEyOKExPzinMUw4rDFZOLExZTi2MXI4uzF+OL8xijjEMZU4yDGgOMwxrDjQMbc40zHCONUxzTjXMdg42DHkONgx8DjXMf041TEJOdMxFTnRMSI5zzEuOcsxOjnIMUc5xDFTOcAxYDm7MW05ezFIM34xkDOAMdczgTEPNIIxNDSCMVc0gjF7NIExnjSBMcE0gDHlNH8xCDV+MSs1fTFONX0xcjV8MZU1ezG4NXsx2zV7Mf41ezEgNnwxQTZ9MWI2fzGDNoAxozaCMcM2hDHhNoYxADeHMR03iTE7N4sxVzeNMXM3jzGPN5ExqjeUMcY3mDHhN5wx/DegMQs4pTEZOKoxJjiwMTM4tTFAOLsxTTjAMVo4xTFnOMoxczjPMX840zGLONgxlzjcMaI44TGuOOUxuTjpMcQ47THPOPAx2jjyMeY48jHzOPEx/zjwMQw57jEZOewxJjnqMTI55zE/OeIxTDnfMVo52zFnOdcxdDmZMUUzmzGOM5wx2DOcMQ80nDE0NJwxWDSbMXs0mzGfNJkxwjSZMeY0lzEJNZYxLTWVMVE1lDF0NZMxlzWSMbo1kjHdNZExADaRMSI2kjFENpMxZTaVMYY2ljGmNpgxxTaaMeQ2mzECN50xHzeeMTw3oDFZN6IxdTekMZA3pjGsN6kxxzetMeI3sDH9N7QxDDi5MRk4vjEmOMQxNDjJMUE4zjFOONMxWzjYMWg43TF0OOIxgTjmMY046zGZOPAxpTj1MbA4+zG7OAAyxjgEMtE4CDLcOAoy6DgMMvU4CzICOQoyDzkJMhw5CDIpOQcyNjkCMkQ5/jFSOfoxYDn2MW058jF7ObgxRTO5MY4zuTHXM7gxEDS4MTQ0tzFYNLYxfDS1MaA0szHENLEx6DSvMQs1rjEvNa0xUzWrMXc1qjGaNakxvTWoMeA1pzECNqgxJDaoMUY2qTFnNqoxiDasMag2rjHHNq8x5TaxMQM3sjEhN7QxPTe1MVo3tzF2N7kxkTe8Maw3vzHHN8Ix4jfFMf03yTEMOM0xGjjSMSc41zE0ONwxQjjhMU845jFcOOoxaTjvMXY48zGDOPgxjzj+MZw4BDKnOAoysjgQMr04FjLIOBsy0zgfMt84IjLrOCQy9zglMgQ5IzISOSIyIDkhMi05ITI6OR0ySTkZMlc5FTJlORIydDkOMoI51zFHM9cxjzPXMdkz1TERNNQxNjTTMVo00TF+NM8xojTNMcY0yzHqNMkxDjXHMTI1xDFWNcMxeTXBMZw1vzG/Nb4x4jW9MQQ2vTEmNr4xSDa/MWo2wDGKNsExqjbDMck2xDHnNsYxBTfIMSI3yTE+N8sxWjfNMXY3zzGSN9IxrTfVMcg32DHjN9sx/jfdMQ044TEaOOUxKDjpMTU47jFDOPIxUDj2MV04+zFrOP8xeDgEMoY4CjKTOBEynzgXMqo4HjK1OCYywDgsMss4MTLWODYy4Tg5Mu44OzL6ODwyCDk6MhY5OjIkOToyMTk7Mj85ODJNOTMyXDkwMms5LDJ6OSoyiDn2MUkz9jGSM/Ux3DPzMRM08TE4NO8xXDTtMYA06zGlNOgxyTTlMe004jERNd8xNTXcMVg12jF8NdgxnjXWMcE11DHkNdMxBjbTMSg20zFKNtQxazbVMYw21jGrNtgxyjbZMeg22zEGN90xIzfeMT834DFbN+MxdzfmMZI36jGtN+0xyDfvMeM38DH/N/IxDjjzMRw49TEqOPkxODj9MUU4AjJTOAYyYDgKMm44DzJ7OBUyijgcMpc4JDKjOCwyrjgzMrk4OzLDOEIyzjhHMtk4TDLlOE8y8ThRMv44UTIMOU8yGjlPMig5UDI2OVEyRDlPMlI5SzJhOUkycTlHMoA5RTKPORYyTTMVMpczEzLhMxEyFjQPMjs0CzJfNAgyhDQGMqg0AjLMNP8x8DT7MRQ1+DE4NfQxWzXxMX417jGhNewxwzXqMeY16TEINukxKjboMUw26TFtNukxjTbqMa027DHLNu4x6TbwMQc38jEjN/QxQDf3MVw3+jF4N/4xkzcCMq03BTLJNwYy5TcFMgE4AzIQOAEyHzgCMi04BTI8OAoySjgOMlc4EjJkOBcycjgeMoA4JjKPOC4ynDg4Mqc4QDKyOEkyvDhSMsc4WTLROF8y3DhjMuk4ZTL1OGYyAzllMhE5ZDIfOWQyLTllMjs5ZTJJOWUyVzljMmc5YjJ2OWEyhTlgMpQ5NzJVMzUynjMzMukzLzIaNCwyPzQpMmM0JTKHNCEyrDQdMtA0GTL0NBUyGDUQMjs1DDJfNQgygTUFMqM1AzLGNQAy6DX/MQo2/jEsNv0xTTb9MW42/TGONv4xrTb/Mcw2ATLqNgQyCDcHMiQ3CjJBNw0yXTcSMnk3FjKTNxoyrzcaMss3FzLpNxMyBDgOMhQ4CzIkOAoyMjgNMkI4ETJROBYyXTgaMmo4ITJ4OCoyhjg1MpU4QDKiOEsyrDhWMrY4YDLAOGkyyjhxMtQ4djLgOHky7Th7Mvo4ezIJOXoyFzl5MiU5eDIzOXgyQTl6Mk85ezJdOXoybTl6Mnw5ejKLOXoymjlZMl8zVjKpM1My8zNPMh40SzJDNEYyaDRCMow0PTKwNDky1DQzMvg0LjIcNSoyPzUlMmI1IDKFNRwypzUZMsk1FjLrNRQyDTYSMi42ETJPNhEybzYQMo82ETKuNhIyzTYUMus2FzIJNxsyJTcfMkI3IzJeNyYyeTcqMpU3LTKyNyoy0zckMvI3HTIKOBcyGzgUMiw4EzI7OBUySzgYMlk4HDJmOCMyczgsMoA4NzKOOEQynDhUMqc4YzKwOG8yuTh6MsM4gzLMOIoy1ziPMuU4kTLyOJIyADmRMg85kDIdOY4yKzmNMjk5jTJHOY8yVDmRMmM5kTJyOZIygTmUMpA5lTKfOXsyazN3MrUzczL/M28yJDRpMkk0ZDJtNF8ykjRaMrY0VDLZNE4y/TRIMiA1QzJDNT4yZjU5Mog1NDKqNTAyzDUsMu41KjIPNicyMDYlMlA2JDJwNiMyjzYjMq42JDLMNicy6zYqMgg3LTIlNzEyQjc0Ml03NzJ5NzgylzczMrc3LTLcNyYy/zcfMhI4HDIkOBwyNjgcMkc4HTJWOCAyYzglMnA4LTJ9ODkyiThHMpY4WTKiOG0yrDh+MrU4jDK9OJcyxTifMs84pTLbOKgy6TioMvc4qTIGOagyFTmnMiM5pTIxOaMyPjmjMkw5pjJaOacyaTmpMng5rDKHOa4ylTmxMqQ5njJ6M5kywzOUMgY0jzIrNIkyTzSCMnQ0fDKYNHYyvDRwMt80ajICNWMyJjVdMkg1VzJrNVEyjTVMMq41RzLPNUMy8TU/MhI2PDIyNjkyUjY3MnI2NjKQNjUyrjY2Msw2OTLpNjsyBjc+MiM3QDI/N0EyWzdAMnc3ODKWNzAytzclMuQ3HzIEOBkyGzgaMi84HzJCOCIyUzgmMmI4LDJwODEyfDg6Moc4SDKTOFwyoDhyMqo4iTKzOJwyujisMsE4uDLIOL4y0zjBMuE4vzLvOL4y/ji/Mg05wDIbOb4yKTm8Mjc5ujJEObsyUjm9Ml85vzJuOcMyfTnGMos5yjKaOc0yqTnDMokzvTLSM7YyDjSvMjI0qDJXNKEyezSaMp80kzLCNIwy5TSFMgk1fjIrNXcyTTVwMm81aTKRNWMysjVeMtM1WDL0NVQyFTZQMjU2TTJUNkoyczZIMpE2RzKvNkgyyzZJMuc2SjIBN0oyHDdKMjg3RjJRNzkybjcrMpE3HjK9NxMy6zcNMg04CjIlOA4yPTgWMlE4HzJjOCsycTg1Mn44PjKJOEkylDhaMp84cDKpOIoysjimMro4vTLAOM8yxjjbMs443TLZONsy6DjVMvc41TIGOdUyFTnVMiI51DIvOdIyPTnSMkk50zJXOdYyZDnZMnM53TKCOeIykDnmMp856jKtOeYymjPgMuQz2DIXNNEyOzTJMl80wTKDNLkypjSxMso0qTLtNKEyDzWZMjE1kTJTNYkydTWCMpY1ezK3NXUy2DVvMvg1aTIYNmQyODZgMlc2XTJ1NloykzZYMrA2WDLLNlky5DZYMvo2VjITN08yJzc8Mjw3JzJbNxEygzcDMrY3+DHwN/QxFDjxMTM4/TFPOAYyZjgVMnY4JDKEODUyjzhEMpk4VTKjOGsyrDiFMrU4ojK8OL4ywjjcMsc47jLPOPcy2Tj2MuQ48DLyOOoyATnpMg856TIdOesyKTnqMjY56TJCOeoyTznsMlw58DJqOfQyeDn5Moc5/jKVOQMzozkHM7E5CzOsMwIz9zP6MiA08jJENOkyaDTgMos02DKvNM8y0TTGMvQ0vTIWNbQyODWrMlk1ozJ6NZsymzWTMrw1jDLcNYUy/TV+Mhw2eDI7NnMyWjZvMng2bDKWNmkysjZoMss2ZzLgNmQy8TZbMv82RzIONy8yITcOMj03/DFrN+4xrzfpMfQ36zEeOPYxQjgDMmA4DTJ1OBoyhzglMpY4MzKhOEUyqzhcMrQ4dzK8OJUywzi2Msk40jLNOPEy0jgBM9w4BjPmOAMz8Tj/Mv44/TILOfsyGDn9MiQ5/zIwOQEzPDkCM0g5BDNUOQczYTkLM285EDN9ORYzizkaM5k5IDOnOSQztTkwM8EzJzMFNB0zKjQUM040CjNxNAAzlDT3Mrg07TLaNOMy/DTaMh410DI/NcYyYDW9MoA1tDKhNasywTWjMuI1mzICNpMyITaMMkA2hjJeNoEyezZ9Mpg2eTK1NnYyyjZ0Mts2bjLqNlgy5jZBMvI2KTIGNwwyJjf7MVw3BzK3NwMy+zcCMiY4DjJNOBYyaDgfMn44JjKUODIypDg5MrA4SDK8OGAyxjh8MtA4nTLUOL4y2jjdMuA4+TLkOAkz7DgOM/U4DTP+OAszCTkNMxU5DjMhOREzLDkWMzc5GTNCORwzTTkfM1k5IjNmOSczdDksM4I5MjOPOTcznTk9M6s5QjO5OVYz2jNMMxA0QTM1NDYzWDQsM3s0ITOeNBczwTQMM+M0ATMENfcyJTXsMkc14jJnNdcyhzXNMqc1xDLHNboy5zWxMgc2qDImNqAyRDaZMmI2kzJ/No4ymzaJMrI2gzLENn8yzTZuMsg2WTLGNkIy0zYqMuo2FTIMNxMyUjcQMpY3EjIAOBcyJDgjMk04LDJtODEyhDgzMps4OzKtOEYyvDhTMsw4bTLZOIYy4TikMuU4xjLtOOMy8zj6Mvg4DDP8OBQzAzkWMwo5GzMUOSEzHjkhMyk5JjM0OSwzPTkyM0c5NjNSOTozXjk+M2s5QzN5OUkzhjlPM5Q5VTOhOVozrjlgM7w5fDPzM3EzHTRlM0A0WjNjNE4zhjRCM6g0NzPKNCsz7DQgMw01FDMuNQkzTzX+Mm818jKPNecyrjXdMs410jLtNcgyDDa+Mis2tDJKNqwyaDalMoQ2nzKeNpoysDaVMrs2iTK6NncyrjZnMqg2TzK4Njwy1DYzMgQ3IjI7NxUymTcZMvk3JDIqODIyTTg+Mm84RDKKOEoyoDhGMrM4VDLFOGMy2Th9Muc4kTLyOLEy+TjOMgI56TIDOQIzBzkTMwo5HjMOOSYzFDkwMx05NDMmOTYzMDk8Mzo5QjNDOUozTTlQM1c5VTNjOVkzcDlfM305ZTOLOWszmDlyM6U5eDOyOX8zvzmjMwY0ljMqNIozTTR+M3A0cTOSNGQztDRYM9U0SzP2ND8zFzUzMzc1JzNXNRozdzUOM5c1AjO2NfYy1TXrMvQ13zISNtQyMTbJMlA2vjJuNrcyijavMqA2rTKwNqYytDaVMq42hzKdNnYynjZpMqw2VzLONkIy9jYpMkM3HzKpNzIy9jcwMis4QzJROE4ydDhVMpE4WzKmOGAyvjhkMtI4eTLiOJgy8jiqMgY5xjIQOd4yEDn5MhA5EjMROSMzFDkwMxY5PDMcOUQzJDlJMy05TDM2OVIzQDlZM0k5YTNSOWgzXDltM2g5dDN1OXozgjmBM445iDObOY8zqDmWM7U5nTPBOcozFDS9Mzc0sDNaNKIzfDSUM540hzO/NHoz4DRsMwE1XzMhNVEzQTVEM2A1NzOANSoznzUdM701ETPbNQMz+jX3Mhg26jI3Nt0yVjbRMnQ2yDKRNsQypja8Mq42tjKoNqcynTaeMpE2lTKXNocyrjZqMsg2SDIDNzcyTjdKMqU3XDLzN1oyJzhdMlM4ZjJ4OGkyljh3Mqw4fzLEOJIy1TirMuU4yTL6ONQyDTneMh059jIZORMzGTkrMxo5OzMZOUkzGzlRMyE5WzMpOV0zMjlhMzs5ZzNFOW8zTjl3M1c5fjNhOYUzbDmNM3k5lTOFOZwzkjmkM545rDOrObMztzm7M8Q58jMjNOQzRTTWM2c0xzOJNLkzqjSrM8s0nDPsNI4zDDV/Myw1cDNLNWMzajVVM4k1RzOnNTkzxTUsM+I1HTMANg8zHjYAMz028jJcNuQyezbZMpc20jKqNtQyrTbMMqQ2wjKUNroykDawMps2njKsNnsyyjZaMgw3XjJfN3AytzdxMv43bDIsOHMyWzh+MoA4iTKgOJkyszipMsI4wDLUONQy5Tj2Mvk4ATMOOfgyGzkHMx45LjMgOUczGzlXMxo5YDMeOWczJDlsMyw5bzM2OXUzPzl7M0k5hDNSOYwzXDmUM2Y5nDNxOaYzfTmvM4k5uDOVOcAzojnIM6450DO6OdkzxzkNNDI0BjRTNPwzdTTtM5Y03zO3NM8z1zTAM/c0sTMXNaEzNjWSM1U1gzN0NXQzkjVlM7A1VjPNNUcz6jU4Mwc2KDMlNhgzQzYHM2I2+DKCNuwynTbmMq025zKuNuIypDbcMpk21TKYNsUyoTa4Mrk2jzLXNoIyKDd8Mnc3hTK9N4MyAjh4MjY4hTJoOJkyiTiwMqQ4wzKyONcywjjrMs84/TLgOBgz8zgqMwo5MDMbOSMzITlMMxo5ZTMWOWwzGTl0Mx45eTMmOX4zLzmEMzk5iTNDOZEzTTmaM1Y5ojNgOaozajm1M3U5wDOBOcozjDnTM5g53DOkOeUzsTntM7059zPJOSE0QjQZNGM0ETSENAk0pDQCNMU09DPkNOQzAzXUMyM1xDNBNbUzYDWkM341lDOcNYQzuTVzM9Y1YzPzNVMzDzZDMys2MTNJNh8zaDYMM4k2/zKkNvgysjb7MrM29zKoNvUypDbnMqU26DK6NtgyxzaqMgM3kzJQN5AyhzefMsE3gDINOGgyPziBMmc4szKKONUypTjnMrA4+jK/OAszzDgcM944NTPxOFAz/jhjMw05azMROXUzEDl4MxQ5fzMXOYUzIDmKMyg5kjMyOZgzPDmfM0Y5pzNQObAzWjm4M2Q5wTNuOc4zeTnaM4Q55DOQOe4zmzn4M6c5ATSzOQY0wDkLNMw5NjRSNC40czQlNJM0HTSzNBU00zQNNPE0BDQQNfgzLzXoM0011zNrNcYziTW1M6Y1pDPDNZIz4DWBM/w1cTMXNl8zMzZMM1A2ODNuNiIzjzYRM642DDO6NhAzvzYNM7s2/zKxNg0zyjYLM9s26DL4NrMyLTefMmE3oDKON7AywzdNMhQ4SDI2OGEyZjjaMok49DKhOAYzrzgZM744KjPOODwz3DhPM+g4aTPyOHwz+jiGMwA5hzMJOYgzETmQMxg5lzMgOZ8zKjmmMzQ5rjM/ObYzSTm+M1M5xzNdOdEzZznbM3E56TN8OfUzhzkANJM5BjSeOQs0qjkQNLY5FTTCORo0zzlKNGM0QjSDNDk0ojQxNME0KDTgNB80/zQXNB01DjQ7NQY0WTX7M3Y16TOUNdczsTXGM801szPpNaIzBTaQMyA2fjM8NmozWDZVM3U2PDOUNiYzszYhM8M2IjPINiAzyTYTM8I2KTPwNiYzDDcgMyo3xjJlN7MyiTfPMrQ34TLvN7syFTiBMls4zzJ+OB8zljgdM6I4JzOyODMzvzhEM804VDPXOGYz3jh7M+Y4jDPvOJMz+jiXMwQ5nDMOOaMzFzmsMyE5tDMsOb0zNjnFM0E5zjNLOdYzVTnhM2A57DNqOfgzdDkDNH85CTSKOQ80ljkUNKE5GjStOR80uTkkNMU5KjTROV40djRWNJQ0TTSyNEQ00DQ7NO80MjQNNSo0KzUhNEg1GDRlNRA0gjUHNJ81+zO7Nekz2DXXM/Q1xDMPNrIzKzafM0Y2izNiNnYzfjZeM5w2RjO6Njkz0DY5M902OzPpNjwz9jY9MxY3NzM0Ny0zWjcdM4k3ETOuNxMz0zcRM/c3GDMOOCQzNzgnM344PDOXODwzpDhJM7E4VTO9OGAzxzhuM9A4fTPXOI0z4DibM+s4ojP2OKkzAjmwMww5uTMYOcIzIjnLMy051DM4Od0zQznmM0058DNXOfwzYjkENGw5CzR3ORE0gjkYNI05HTSYOSM0pDkpNLA5LjS7OTQ0yDk6NNQ5czSINGo0pjRhNMQ0WDThNE40/zRGNBw1PTQ5NTQ0VjUrNHI1IjSPNRk0qjUQNMY1BzTiNfwz/jXpMxk21TM0NsIzUDauM2w2mjOINoQzpDZuM8E2WjPcNlEz7zZSMwE3UzMZN1AzODdGM1o3PjN5NzgznDcxM8A3MTPgNzMz/zdEMw84azMqOGczXzhoM5U4ajOhOHQzrjh5M7g4fzPAOIkzyDiWM9I4pTPcOK8z5zi3M/Q4vjMAOcczDTnQMxg52jMkOeMzLzntMzo59jNEOQA0TzkHNFk5DTRkORQ0bjkaNHk5ITSEOSc0jzktNJs5MjSmOTg0sjk+NL45RDTKOUo01zmHNJs0fTS4NHQ01TRrNPI0YjQPNVk0KzVQNEc1RzRkNT40fzU1NJs1LDS3NSM00jUaNO01ETQINgc0JDb8Mz826TNaNtQzdjbAM5I2rDOtNpkzyDaGM+I2dTP+Nm4zEzdsMyw3ZDNNN18zazdaM4k3VjOqN1IzyjdXM+U3YTMDOHMzFjiFMy84kDNNOJwzdDieM5M4nzOjOKEzrzikM7k4qjPDOLUzzzi+M9k4xzPnOM4z9DjXMwA53zMNOeozGTn4MyQ5AjQwOQc0OjkNNEU5EjRQORg0WzkfNGU5JTRwOSs0ezkxNIY5NzSROT00nTlCNKg5SDS0OU80wDlVNMw5WzTZOZs0rzSRNMs0iDToNH40BDV1NB81bDQ6NWM0VzVaNHI1UjSNNUk0qDVANMM1NzTeNS00+DUkNBM2GzQvNhE0SjYINGU2/TOANuozmzbXM7c2xTPRNrMz7DajMwY3lDMhN44zOjeFM1c3gDN0N4AzkTd6M7A3ejPPN4Mz8DeOMwg4mjMdOKUzNDiyM084uzNrOMAzhTjBM5o4wTOoOMQztTjJM8A40TPMONgz2TjgM+Y46DPzOPczADkCNA05BzQZOQ40JTkUNDA5GTQ7OR80RjkkNFE5KjRcOTA0Zzk2NHI5PDR9OUI0iDlINJM5TTSfOVM0qjlZNLY5XzTCOWU0zzlsNNs5rzTDNKU03zScNPo0kjQVNYk0MDWANEs1dzRmNW40gDVlNJs1XDS1NVQ00DVLNOo1QTQENjg0HzYvNDo2JjRUNh00bzYUNIo2CzSlNgI0wDbzM9s25DP2NtUzEDfIMyo3vDNFN7QzYDeuM303rDOaN6gzuTerM9k3rzP6N7QzDzi7MyI4xjM4ONAzTzjYM2c43DN+OOAzkTjjM6I46DOwOPAzvTj4M8s4ADTYOAQ05jgJNPM4DzQAORQ0DDkaNBk5IDQlOSY0MDksNDw5MTRHOTY0Ujk8NF05QjRoOUg0czlNNH45UzSKOVk0lTleNKA5ZDSsOWk0uDlvNMQ5djTQOX003TnDNNg0uTTyNLA0DTWmNCc1nTRCNZQ0XDWLNHY1gzSPNXo0qTVxNMM1aDTdNV809jVWNBA2TTQqNkQ0RDY7NF82MzR5Nio0lDYiNK82GjTKNhI05TYMNAA3BDQaN/wzNjfyM1A36TNrN+MziDffM6U33DPEN9wz5DfeMwM44DMUOOMzJzjqMzs48TNQOPkzZTgANHo4AjSNOAU0nTgINK04DDS7OBA0yTgUNNc4GDTlOB008jgiNP84KDQMOS40GDkzNCU5OTQwOT40PDlDNEc5STRTOU40XjlUNGk5WTR0OV80gDlkNIs5ajSWOW80ojl1NK05ejS5OYA0xjmHNNI5jjTeOdY07TTNNAc1wzQgNbo0OjWxNFM1qDRsNZ80hTWWNJ81jjS4NYU00TV9NOo1dDQENmw0HTZjNDY2WjRQNlI0ajZKNIQ2QjSeNjo0uTYyNNQ2KzTvNiU0CjceNCU3GTRANxQ0XDcQNHc3DDSTNwo0sDcINM83BzTvNwg0CDgINBk4CTQrOAw0PjgONFE4ETRkOBQ0eDgXNIo4GjSaOB00qjghNLk4JTTIOCk01jgtNOQ4MjTyODc0/zg8NAw5QTQYOUY0JDlMNDA5UTQ8OVY0SDlbNFM5YDRfOWU0ajlrNHU5cDSBOXY0jDl7NJg5gDSjOYY0rzmMNLs5kjTHOZg00zmfNN856jQCNeA0GzXXNDQ1zjRMNcU0ZTW8NH01szSWNao0rjWiNMc1mjTfNZE0+DWJNBA2gTQpNnk0QjZxNFw2aTR2NmE0jzZaNKk2UjTDNks03jZFNPk2PjQUNzg0LzczNEs3LjRnNyo0gjcnNJ83IzS8NyI02jchNPk3IDQNOCE0HTgiNC44JDRAOCU0UjgnNGQ4KjR3OC00iDgwNJk4MzSpODc0uDg6NMc4PjTVOEM04zhHNPE4SzT+OFA0CzlVNBg5WjQkOV80MDlkNDw5aDRIOW00UzlyNF85dzRrOXw0djmBNIE5hzSNOYw0mDmSNKQ5lzSwOZ00vDmjNMc5qTTTObA04Dn9NBc18zQvNeo0SDXhNF812DR3Nc80jzXHNKY1vzS+NbY01jWuNO41pjQGNp40HjaXNDY2jzRPNoc0aDaANIE2eDSbNnE0tTZqNM82ZDTpNl40AzdYNB43UjQ6N000VTdJNHE3RTSNN0E0qjc+NMc3PDTkNzs0Ajg6NBE4OjQhODs0Mjg8NEM4PTRUOD80ZjhBNHc4RDSIOEc0mDhKNKg4TTS3OFE0xjhUNNQ4WDTjOFw08ThgNP44ZDQLOWk0GDltNCQ5cjQwOXY0PDl7NEg5gDRUOYQ0YDmJNGs5jjR3OZM0gjmYNI45nTSZOaM0pTmoNLA5rjS8ObM0yDm6NNQ5wjTgORA1LDUGNUQ1/TRbNfQ0cjXrNIk14zSgNds0tzXTNM81yzTmNcM0/TW7NBQ2tDQsNqw0RDalNFw2nTR1NpY0jTaPNKY2iDTANoE02jZ8NPQ2djQON3E0KTdsNEQ3ZzRgN2M0fDdfNJg3WzS0N1g00TdWNO43VDQGOFM0FThUNCU4VDQ1OFQ0RjhWNFc4VzRoOFo0eDhcNIg4XjSYOGE0qDhkNLc4ZzTGOGo01DhuNOI4cTTwOHU0/jh5NAs5fTQYOYE0JDmFNDA5iTQ9OY00STmSNFU5ljRgOZs0bDmfNHc5pDSDOak0jjmuNJo5szSmObk0sTm+NL05xDTJOcs01TnSNOA5IjVCNRk1WTUQNW81BzWGNf40nDX2NLI17zTJNec03zXfNPY11zQMNtA0IzbJNDo2wjRRNrs0aTa0NIE2rTSaNqY0szagNMw2mTTlNpM0/zaONBk3iTQ0N4Q0TjeANGo3fDSGN3g0ojd0NL43cTTbN280+DduNAs4bTQaOGw0KThtNDk4bTRJOG40WThvNGk4cTR6OHM0iTh2NJk4eDSoOHs0tzh+NMY4gDTUOIM04jiHNPA4ijT+OI00CzmRNBg5lDQkOZg0MTmcND05oDRJOaQ0VTmoNGE5rDRsObE0eDm1NIQ5ujSPOb80mznENKY5yTSyOc80vTnVNMk53DTVOeM04Dk0NVg1KzVuNSI1gzUZNZk1ETWuNQk1xDUCNdo1+jTwNfM0BjbsNBs25DQyNt40SDbXNF820DR2Nso0jjbDNKY2vTS/Nrc02DaxNPE2qzQLN6Y0JTehND83nDRZN5g0dTeUNJA3kDSsN400yDeKNOU3hzQBOIY0DziFNB44hTQtOIU0PDiGNEw4hzRcOIg0bDiJNHw4izSLOI00mjiPNKk4kTS4OJQ0xziWNNU4mTTjOJs08TieNP44oTQLOaQ0GDmnNCU5qzQxOa40PTmyNEo5tjRWObo0YTm+NG05wjR5OcY0hDnLNJA50DSbOdU0pznaNLI53zS+OeU0yTnsNNU59DTgOUU1bjU8NYM1NDWYNSs1rDUkNcE1HDXWNRU16zUNNQA2BjUWNv80Kzb5NEE28jRXNuw0bTblNIQ23zSbNtk0szbUNMs2zjTkNsk0/TbDNBY3vjQwN7k0STe0NGQ3sDR/N6w0mjeoNLY3pTTTN6I07jefNAU4njQUOJ00IjidNDE4njRAOJ40TzifNF84oDRuOKE0fjiiNI04pDScOKY0qzioNLk4qjTIOKw01jiuNOQ4sDTxOLI0/zi1NAw5uDQZObs0JTm+NDI5wTQ+OcQ0SjnINFY5yzRiOc80bjnTNHk52DSFOdw0kDnhNJw55TSnOes0sjnwNL459jTJOf001DkENeA5VjWENU01lzVFNas1PTW/NTU11DUuNeg1JzX8NSE1EDYaNSU2EzU6Ng01UDYHNWY2ADV7Nvo0kjb0NKg27zTANuk02DbkNPA23zQIN9o0ITfUNDs30DRUN8w0bzfHNIk3wzSlN8A0wTe8NN03uTT4N7c0Cji1NBg4tTQmOLU0NTi1NEQ4tjRSOLY0Yji3NHI4uDSBOLo0jzi7NJ44vDStOL40uzi/NMk4wDTXOMI05TjENPI4xjQAOck0DTnLNBo5zjQmOdA0MznTND851jRLOdo0VzndNGM54TRvOeQ0ejnoNIY57TSROfE0nDn2NKc5+zSyOQE1vjkGNck5DTXUORU13zlmNZo1XjWtNVY1wDVONdM1RzXmNUA1+jU5NQ02MzUhNiw1NTYmNUo2IDVeNho1dDYUNYk2DzWfNgk1tjYENc02/zTkNvo0/Db1NBQ38DQsN+s0RjfnNF834jR5N980lDfbNK832DTLN9U05jfSNAE40DQPOM40HTjNNCs4zTQ5OM00SDjNNFY4zjRlOM40dTjPNIM40DSSONE0oDjSNK840zS9ONU0yzjWNNk41zTnONk09DjbNAE53TQOOd80GznhNCg55DQ0OeY0QDnpNE057DRYOe80ZDnyNHA59jR7Ofo0hjn+NJI5AjWcOQc1qDkMNbM5ETW9ORY1yDkdNdM5JTXdOXY1sDVuNcE1ZjXTNV815jVYNfk1UTULNks1HjZFNTI2PzVFNjk1WTY0NW02LjWCNik1lzYkNaw2HjXDNhk12TYUNfA2DzUINws1HzcGNTg3AjVRN/00ajf5NIM39jSeN/I0uTfvNNQ37DTvN+o0BTjoNBM45jQhOOU0LzjlND045DRLOOU0WjjlNGk45TR4OOY0hjjmNJU45zSjOOg0sTjpNL846jTNOOs02zjsNOk47jT2OPA0AznxNBA58zQdOfQ0Kjn3NDY5+TRCOfs0Tjn+NFo5ADVlOQM1cTkHNXw5CjWHOQ41kjkTNZ05FzWoORw1sjkhNb05JzXHOS410jk1Ndw5hDXFNXw11jV1Nec1bjX5NWg1CzZiNR02XDUvNlc1QjZRNVU2TDVoNkc1fDZBNZA2PDWlNjg1ujYzNdA2LjXmNik1/TYlNRM3IDUrNxw1QzcYNVs3FDV0NxA1jTcMNag3CTXCNwY13TcENfg3ATUJOP80Fzj+NCU4/DQzOPw0QTj7NFA4/DReOPw0bTj8NHs4/DSJOP00mDj+NKY4/jS0OP80wjgANdA4ADXeOAE16zgCNfg4BDUFOQU1EjkGNR85CDUrOQo1ODkLNUQ5DTVQORA1WzkSNWc5FTVyORg1fTkcNYg5HzWTOSM1njkoNag5LDWyOTI1vTk3Ncc5PjXROUU12zmSNds1ijXrNYQ1+zV+NQw2eDUdNnI1LjZtNUA2aDVSNmM1ZTZeNXg2WjWLNlU1njZQNbM2TDXHNkc13DZDNfI2PjUINzo1Hzc2NTY3MjVNNy41ZjcqNX83JzWYNyM1sTcgNcs3HTXlNxs1ADgZNQ04FjUbOBU1KTgTNTc4EzVFOBI1VDgSNWI4EjVxOBI1fzgTNY04EzWbOBM1qjgUNbc4FDXFOBU10zgVNeA4FjXuOBc1+zgYNQg5GTUVORo1ITkbNS45HDU6OR41RjkgNVI5ITVdOSQ1aTkmNXQ5KTV/OSw1ijkwNZQ5NDWeOTg1qDk9NbI5QjW8OUc1xjlONdA5VTXZOZ818DWYNf81kjUONow1HjaHNS42gjU/Nn01UDZ5NWI2dDV0NnA1hzZsNZk2aDWtNmQ1wDZgNdQ2XDXpNlg1/jZTNRQ3TzUqN0s1QTdINVg3RDVvN0A1iDc9NaE3OjW6Nzc11Dc0Ne43MjUEOC81EjgtNSA4LDUuOCo1OzgpNUo4KTVYOCg1ZjgoNXQ4KDWDOCg1kTgoNZ84KDWtOCk1uzgpNck4KjXWOCo15DgrNfE4KzX+OCw1CzksNRg5LTUkOS41MDkvNTw5MDVIOTI1VDkzNV85NTVqOTg1djk6NYA5PTWLOUA1lTlENZ85SDWpOU01szlSNbw5VzXFOV41zjlkNdc5qzUFNqU1EzafNSE2mjUwNpY1QDaSNVA2jTVhNoo1cjaGNYQ2gjWVNn81qDZ7Nbo2eDXNNnQ14DZwNfQ2bDUJN2g1HzdkNTQ3YTVLN101YTdaNXk3VzWRN1M1qTdQNcI3TTXcN0s19jdINQg4RjUWOEQ1JDhCNTI4QTVAOEA1Tjg/NVw4PjVqOD41eTg+NYc4PTWVOD01ozg+NbE4PjW/OD41zDg/Ndo4PjXnOD819Tg/NQE5QDUOOUA1GzlBNSc5QTUzOUI1PzlDNUs5RDVWOUU1YTlHNW05STV3OUs1gjlONYw5UTWWOVQ1oDlYNao5XDWzOWE1vDlnNcU5bTXNOXQ11jm1NRk2sTUmNqw1NDaoNUI2pDVRNqA1YTadNXE2mjWCNpc1kzaUNaQ2kjW2No81yDaMNds2iDXtNoQ1ADeBNRU3fTUqN3k1Pzd2NVU3czVrN281gTdsNZk3aTWxN2Y1yjdkNeQ3YTX+N181DDhdNRo4WjUnOFk1NThXNUM4VjVSOFU1YDhUNW44VDV9OFM1izhTNZk4UjWnOFM1tThSNcM4UjXQOFM13jhTNes4UzX4OFM1BTlTNRE5UzUeOVQ1KjlUNTY5VDVCOVU1TTlWNVg5VzVjOVg1bzlaNXk5XDWDOV81jjliNZc5ZTWhOWg1qjltNbM5cTW8OXc1xDl9Ncw5gzXUOcA1LDa8NTg2uDVFNrU1UzayNWE2rzVwNq01gDaqNZA2qDWhNqY1sjakNcM2ojXVNqA15zadNfk2mTUMN5U1HzeRNTM3jjVIN4s1XTeINXM3hTWKN4I1oTd/Nbk3fDXSN3o16zd3NQM4dTUQOHM1HThxNSs4bzU5OG01RzhsNVY4azVkOGo1cjhpNYE4aDWPOGg1nThnNas4ZzW5OGc1xzhnNdU4ZzXiOGc17zhnNfw4ZzUJOWc1FTlnNSE5ZzUtOWc1OTlnNUU5ZzVQOWg1WzlpNWY5ajVxOWs1ezluNYU5cDWPOXI1mTl1NaM5eDWrOXw1tDmANbw5hjXDOYs1yzmRNdI5yDU+NsY1STbENVU2wTViNr81cDa9NX42uzWONro1nja4Na42tzW/NrY10Da1NeE2szXyNrA1BDetNRY3qTUoN6Y1PDeiNVA3nzVlN5w1fDeaNZI3lzWpN5Q1wDeRNdk3jzXyN401BjiKNRM4iTUhOIc1LziFNT04gzVLOII1WTiANWg4fzV2OH41hDh+NZM4fTWhOH01rzh9Nb04fDXLOHw12Th8NeY4fDXzOHs1ADl7NQw5ejUZOXo1JTl6NTE5ejU8OXo1SDl6NVM5ejVeOXo1aTl7NXM5fTV+OX81iDmBNZI5gjWbOYU1pDmINa05izW1OY81vDmTNcM5mDXKOZw10DnQNUw2zzVXNs81YzbNNW82zDV8Nso1izbKNZo2yDWqNsg1ujbHNco2xjXbNsY17DbFNf02wjUON781Hze8NTE3uDVEN7U1WDezNW03sDWDN641mTerNbA3qTXIN6Y14DekNfk3ojUJOKA1FzieNSQ4nTUyOJs1QDiZNU84lzVdOJY1aziVNXk4lDWIOJM1lziTNaU4kjWzOJI1wTiRNc84kTXcOJA16jiQNfc4kDUEOY81EDmONRw5jjUpOY41NDmNNUA5jTVLOYw1VjmMNWE5jDVsOY01djmONYA5kDWKOZE1lDmTNZ05lTWmOZc1rjmZNbY5nDW9OZ81xDmiNco5pjXPORU5UjYVOVo2FTllNhU5cjYVOYA2FTmPNhU5njYVOa82FTm/NhU50DYVOeA2FDnxNhQ5AjcWORI3FzkjNxk5NTcaOUk3HDldNx05cTceOYc3HzmeNyA5tDchOcw3IjnkNyM5/jckOQw4JTkZOCY5JzgnOTU4KDlDOCg5UTgpOWA4KjlvOCo5fTgrOYs4KzmaOCs5qTgsObc4LDnFOCw50zgtOeE4LTnuOC05+zguOQg5LjkVOS85ITkvOS05Lzk5OTA5RTkwOVA5MDlbOTA5ZjkxOXE5MDl7OTA5hTkwOY85LzmZOS85ojkuOas5LTmzOS05uzksOcI5KznIOSo5zTkqOdE5FzlINhg5UzYYOV82GTlqNhk5eDYaOYY2GjmWNhs5pjYbObY2GznGNhw51zYcOek2HDn6Nh45CzcfORw3ITkuNyM5QjckOVY3JTlrNyc5gTcoOZc3KTmuNyo5xjcsOd43LTn3Ny45CTgvORY4MDkkODE5MjgyOUA4MjlOODQ5XTg0OWs4NTl6ODU5iDg2OZc4NjmmODY5tDg2OcI4NznQODc53Tg4Oes4ODn4ODg5BTk4ORE5OTkeOTk5Kjk5OTY5OTlCOTo5TTk6OVg5OjljOTo5bjk6OXg5OTmCOTg5jTk3OZY5NzmgOTY5qTk0ObE5NDm5OTI5wDkwOcc5LznNOS050jkbOTo2HDlFNh45UTYfOV42IDlsNiE5ezYhOYo2IjmaNiM5qzYkObs2JDnMNiU53jYlOe82JzkBNyg5EzcqOSY3LDk6Ny45TjcvOWM3MTl5NzI5kDczOac3NTm/NzY51zc3OfE3OTkGODo5Ezg7OSE4PDkvOD05PTg9OUs4PjlaOD85aDhAOXY4QDmFOEA5lDhBOaI4QTmwOEE5vjhBOcw4QjnaOEI55zhCOfU4QjkBOUM5DjlDORo5QzknOUM5MjlDOT45QzlKOUM5VTlDOWA5QzlrOUM5djlCOYA5QTmKOUA5lDk/OZ45PjmnOTw5sDk7Obg5OTm/OTY5xjk0Oc05MjnTOSA5KDYiOTQ2IzlBNiU5TzYmOV02KDlsNik5fDYqOYw2KzmdNiw5rjYtOcA2LjnSNi855DYxOfY2MjkJNzQ5HDc2OTE3ODlGNzk5Wzc7OXE3PTmINz45nzc/Obc3QTnQN0I56jdDOQI4RTkPOEY5HThHOSs4Rzk5OEg5RzhJOVY4SjlkOEo5czhLOYE4SzmQOEs5njhMOaw4TDm6OEw5yDhMOdY4TDnjOEw58ThMOf44TDkKOU05FzlNOSM5TTkvOU05OzlNOUc5TDlSOUw5XTlMOWg5SzlzOUo5fjlJOYg5SDmSOUc5nDlGOaU5RDmuOUI5tzlAOb85PTnGOTs5zjk4OdU5JTkVNic5IzYpOTE2LDk/Ni05TjYvOV02MTltNjI5fjY0OZA2NTmhNjY5szY4OcU2OTnYNjs56jY9Of42PzkSN0A5JzdCOTw3RDlSN0Y5aTdHOX83STmXN0o5rzdMOck3TTnjN045/TdPOQw4UTkaOFI5JzhTOTU4UzlEOFQ5UjhVOWA4VTlvOFU5fThWOYw4VjmaOFY5qDhWObY4VjnEOFY50jhWOd84VjntOFY5+jhWOQc5VjkTOVY5IDlWOSw5Vjk4OVY5RDlWOU85VTlbOVU5ZjlUOXE5Uzl8OVI5hjlROZA5TzmaOU45pDlMOa05Sjm2OUc5vzlFOcc5QjnPOT851zkqOQI2LTkQNjA5HjYyOS02NTk9Njc5TTY5OV42OzlvNjw5gTY+OZI2QDmlNkI5tzZDOco2RTndNkc58jZJOQc3SzkcN005MjdPOUg3UDlfN1I5dzdUOY83VTmoN1c5wTdYOdo3WTn1N1s5CDhcORY4XTkkOF45MjheOUA4XzlOOGA5XDhgOWs4YDl5OGA5iDhhOZY4YTmkOGE5sjhgOcA4YDnOOGA52zhgOek4YDn2OGA5AzlgORA5YDkcOWA5KTlgOTU5XzlBOV85TTleOVg5XjlkOV05bzlcOXo5WzmFOVk5jzlYOZk5VjmjOVQ5rTlSObY5Tzm/OU05yDlJOdE5RjnZOTA57jU0Ofw1NzkLNjo5GzY8OSw2Pjk8NkE5TTZDOV82RTlyNkc5hDZJOZY2SzmqNk05vTZPOdE2UTnmNlM5+zZVORE3VzkoN1k5PjdbOVU3XTltN185hjdgOZ83Yjm4N2M50jdlOe03ZjkEOGc5EjhoOSA4aTktOGo5PDhqOUo4azlYOGs5ZzhrOXU4azmEOGs5kjhrOaA4azmuOGs5vDhrOco4aznYOGs55ThrOfI4ajkAOWo5DTlqORo5aTkmOWk5MjlpOT85aDlKOWc5VjlnOWI5ZjltOWQ5eDljOYM5YjmOOWA5mDleOaI5XDmsOVo5tjlXOb85VTnJOVE50jlOOds5NznYNTo56DU+Ofg1QTkJNkQ5GjZHOSs2STk9Nkw5TzZOOWI2UDl1NlM5iDZVOZw2VzmwNlk5xDZcOdk2XjnvNmA5BjdiORw3ZDkzN2Y5SzdoOWM3ajl8N2w5ljdtOa83bznKN3A55DdxOf83czkNOHQ5Gzh0OSk4dTk3OHU5Rjh2OVQ4djljOHY5cTh2OYA4djmOOHY5nDh2Oas4dTm5OHU5xjh1OdQ4dTniOHU57zh0Of04dDkKOXQ5FzlzOSM5czkwOXI5PDlxOUg5cDlUOXA5YDluOWs5bTl3OWw5gjlqOYw5aDmXOWY5oTlkOaw5Yjm2OV85wDldOco5WTnTOVY53Tk+OcM1QjnUNUU55TVJOfY1TDkINk85GjZSOSw2VDk/Nlc5UjZaOWU2XDl5Nl85jTZhOaI2ZDm3NmY5zTZoOeM2azn6Nm05ETdvOSg3cTlAN3M5WTd1OXI3dzmLN3k5pjd6OcA3fDnbN3059jd+OQk4fzkXOIA5JTiBOTM4gTlBOIE5UDiBOV84gTltOIE5fDiBOYo4gTmZOIA5pziAObU4gDnDOIA50Th/Od84fznsOH85+jh+OQc5fTkUOX05ITl8OS05ezk6OXo5Rjl6OVI5eDleOXc5aTl2OXU5dDmAOXI5izlxOZY5bzmhOWw5qzlqObY5ZznAOWU5yjlhOdQ5XjneOUU5rjVJOb81TTnRNVA54zVUOfY1VzkJNlo5GzZdOS82YDlCNmM5VjZmOWo2aTl/Nms5lDZuOak2cDnANnM51jZ1Oe02eDkFN3o5HDd8OTU3fjlON4A5ZzeCOYE3hDmbN4Y5tzeHOdI3iTnuN4o5BTiLORI4jDkgOIw5LjiMOT04jTlLOI05WjiMOWk4jDl4OIw5hziMOZY4izmkOIs5sjiLOcA4ijnOOIo53DiJOeo4iTn3OIg5BTmHORI5hzkfOYY5KzmFOTg5hDlEOYM5UDmBOVw5gDloOX85dDl9OX85ezmKOXk5lTl3OaA5dTmrOXI5tjlwOcA5bTnLOWk51jlmOeA5TTmYNVE5qzVVOb01WTnQNVw54zVgOfc1YzkKNmc5HjZqOTI2bTlGNnA5WzZzOXE2djmGNng5nDZ7ObI2fjnJNoA54DaDOfg2hTkQN4c5KTeKOUI3jDlcN445dzeQOZE3kTmsN5M5yDeVOeQ3ljkAOJc5DjiYORw4mDkqOJg5OTiYOUg4mDlWOJg5ZjiYOXU4lzmEOJc5kziXOaE4ljmwOJU5vjiVOcw4lTnaOJQ56DiTOfU4kjkDOZE5EDmQOR05jzkqOY45NjmNOUI5jDlPOYo5WzmJOWc5hzlyOYU5fjmEOYk5gTmUOX85nzl9Oas5ejm2OXg5wTl1Ocs5cTnWOW454TlVOYI1WjmVNV45qTViObw1ZTnRNWk55TVtOfk1cDkNNnM5IjZ3OTc2ejlMNn05YjaAOXg2gzmONoY5pTaIObw2iznUNo457DaQOQU3kzkeN5U5NzeXOVE3mTlrN5w5hjedOaI3nzm+N6E52jeiOfY3pDkJOKQ5FzikOSY4pTk1OKQ5RDikOVI4pDliOKM5cjijOYE4ojmQOKI5nzihOa04oDm8OKA5yjifOdg4njnmOJ058zicOQE5mzkOOZo5GzmZOSg5mDk1OZY5QTmVOU05kzlZOZI5ZTmQOXE5jjl9OYw5iDmKOZQ5iDmfOYU5qjmDObY5gDnBOX05zDl6Odc5djniOV45azViOYA1ZjmVNWs5qTVvOb41cjnTNXY56DV6Of01fTkSNoE5JzaEOT02hzlTNoo5aTaNOYA2kDmXNpM5rzaWOcc2mTnfNps5+DaeORI3oTksN6M5RTelOWA3pzl7N6k5lzerObM3rTnQN6457DevOQQ4sDkTOLA5IjiwOTE4sDk/OLA5TzivOV84rzluOK45fjiuOY44rTmcOKw5qzirObo4qjnIOKk51jioOeQ4pznyOKY5ADmlOQ05pDkaOaI5JzmhOTM5nzlAOZ45TDmcOVg5mjlkOZk5cDmXOXw5lDmHOZI5kzmQOZ85jjmqOYs5tTmIOcE5hTnMOYI52Dl+OeM5ZzlVNWs5azVwOYE1dDmWNXg5qzV8OcE1gDnWNYM57DWHOQI2izkXNo45LTaSOUQ2lTlaNpg5cjabOYo2njmhNqE5ujakOdM2pznsNqo5BjetOSA3rzk7N7E5VTezOXE3tTmMN7c5qTe5OcU3ujniN7s5/ze8OQ44vDkdOLw5LDi8OTw4vDlMOLs5XDi7OWw4ujl8OLk5izi4OZs4tzmqOLY5uTi1Occ4tDnVOLM54ziyOfE4sDn/OK85DDmtORk5rDkmOao5MjmpOT85pzlLOaU5VzmjOWM5oTlvOZ85ezmdOYc5mzmSOZg5njmWOao5kzm1OZA5wTmOOcw5ijnYOYY55DlwOUA1dTlWNXk5bDV9OYI1gjmYNYY5rjWKOcU1jjnbNZE58TWVOQg2mTkeNpw5NTagOUw2ozlkNqc5fDaqOZQ2rTmtNrA5xjazOeA2tzn6Nrk5FDe7OS83vTlKN8A5ZjfCOYI3wzmeN8U5uzfGOdg3xzn2N8g5CjjJORk4yTkoOMg5ODjIOUg4yDlZOMc5aTjGOXo4xTmJOMQ5mTjDOag4wTm3OMA5xji/OdU4vTnjOLw58Ti6Of44uTkMObc5GDm1OSU5tDkyObI5PjmwOUs5rjlXOaw5YzmqOW45qDl6OaU5hjmjOZI5oTmdOZ45qTmbObU5mTnAOZY5zDmSOdg5jjnkOXk5KjV+OUE1gzlYNYc5bzWLOYY1kDmcNZQ5szWYOco1nDnhNaA5+DWjOQ82pzkmNqs5PjauOVc2sjlvNrY5hza5OaA2vDm6NsA51DbCOe42xTkIN8c5JDfKOT83zDlbN845dzfQOZM30jmwN9M5zjfUOew31TkFONU5FDjVOSQ41Tk1ONU5RTjUOVY40zlnONI5eDjROYg40DmYOM45qDjNObc4yznGOMo51DjIOeI4xjnwOMU5/jjDOQs5wTkYOb85JTm9OTE5uzk+Obk5Sjm3OVY5tTliObM5bjmwOXk5rjmFOas5kTmpOZw5pjmoOaQ5tDmhOcA5njnMOZs52DmXOeQ5gzkUNYg5LDWNOUQ1kTlbNZU5czWaOYo1njmiNaI5uTWmOdE1qjnoNa45ADayORg2tjkwNro5STa9OWI2wTl7NsU5lTbIOa42yznINs854jbROf021DkYN9c5NDfZOVA32zlsN905iDffOaU34DnDN+E54TfiOQA44jkQOOI5IDjhOTE44TlCOOA5UzjfOWU43jl3ON05iDjbOZg42jmnONg5tzjWOcY41TnUONM54jjROfA4zzn+OM05CznLORg5yDklOcY5MTnEOT05wjlJOcA5VTm9OWE5uzltObk5eTm2OYQ5tDmQObE5nDmvOac5rDmzOak5vzmmOcs5oznXOZ854zmNOf80kjkXNZY5MDWbOUg1oDlgNaQ5eDWoOZE1rTmpNbE5wTW1Odk1uTnyNb05CjbBOSM2xTk7Nsk5VTbNOW820TmINtQ5ojbYObw22znXNt458jbhOQ035DkpN+c5RDfpOWE36zl8N+w5mjfuObg37jnWN+859jfvOQs47zkcOO45LjjtOUA47DlSOOs5ZDjqOXY46DmIOOc5mDjlOag44zm4OOE5xjjfOdU43TnjONs58TjZOf441zkLOdQ5GDnSOSU50DkxOc05PTnLOUk5yTlVOcY5YTnEOWw5wjl4Ob85gzm8OY85ujmbObc5pzm0ObI5sjm+Oa85yjmrOdY5qDnjOZc56TScOQM1oDkcNaU5NjWqOU41rjlnNbI5gDW3OZk1uzmyNb85yzXEOeQ1yDn9Ncw5FTbQOS821DlINtg5YjbcOXw24DmWNuQ5sTboOcw26znnNu45AjfxOR039Dk5N/c5VTf4OXE3+jmON/s5rDf8Ocs3/DnsN/w5Bzj7ORg4+jkqOPk5PTj4OVE49jlkOPU5eDjzOYk48TmaOPA5qjjuObk47DnHOOo51TjoOeQ45TnxOOM5/zjhOQs53jkYOdw5JDnZOTE51zk9OdQ5SDnSOVQ5zzlgOc05aznKOXc5yDmCOcU5jjnCOZo5wDmlOb05sTm6Ob05tznJObQ51jmwOeI5oTnUNKY57zSrOQk1sDkjNbQ5PTW4OVY1vTlwNcE5iTXFOaM1yjm8Nc451jXTOe811zkINts5IjbgOTw25DlWNug5cTbsOYs28DmmNvQ5wTb4Od02+zn3Nv85EjcCOi43BDpJNwY6ZTcIOoI3CTqgNwk6wDcJOuA3CDoCOAg6EzgHOiY4BTo7OAM6UDgBOmU4/zl6OP45jDj8OZ04+jmtOPg5uzj2Ock49DnXOPI55DjwOfI47Tn/OOo5DDnoORg55TklOeI5MDngOTw53TlIOds5UznYOV851TlqOdM5djnQOYE5zjmNOcs5mDnIOaQ5xTmwOcM5vDnAOcg5vDnUObk54TmrOb80sDnbNLU59jS6ORE1vjkrNcM5RTXHOWA1zDl6NdA5lDXUOa412TnJNd054jXiOfw15jkWNus5MTbvOUw29DlmNvg5gTb8OZs2ATq3NgU60jYIOu02DDoHNw86IjcSOj03FDpZNxU6dzcWOpU3Fjq1NxU61jcUOvc3EzoOOBE6ITgOOjg4CzpPOAk6ZzgIOn44BzqROAY6ojgEOrA4Ajq9OAA6yzj+Odg4/DnlOPo58jj3Of849DkMOfE5GDnuOSQ56zkwOek5PDnmOUc55DlTOeE5XjneOWk52zl1Odk5gDnWOYs50zmXOdE5ojnOOa45yzm6Ocg5xznFOdM5wTngObY5qzS7Occ0vznjNMQ5/jTIORo1zTk0NdE5UDXWOWs12jmGNd85oTXjObs15znVNew58DXwOQo29TklNvo5QDb+OVs2Azp2Ngc6kjYMOq02EDrINhU64zYZOv02HToYNx46MjcgOk83ITpuNyE6jDciOqw3IjrMNx867TccOgc4GTocOBY6NDgTOk44ETprOA86hTgPOpo4DzqoOA46tTgMOsA4CjrMOAg62TgGOuY4BDrzOAA6/zj9OQw5+jkYOfc5JDn0OTA58jk7Oe85RznsOVI56jldOec5aDnkOXM54Tl+Od45ijncOZU52TmhOdY5rTnTObk50DnFOc050TnKOd45wDmXNMU5szTJOdA0zjntNNI5CTXXOSU12zlBNeA5XTXkOXg16DmTNe05rjXxOco19jnkNfo5/zX/ORo2Azo1Ngg6UDYNOmw2EjqHNhc6ozYcOr42IDrYNiQ69DYmOgo3JzokNyg6RjcpOmU3KzqENys6pjcsOsc3KzrjNyg6AjgjOhU4HzovOBw6TTgZOnQ4GDqTOBc6ozgXOq84Fjq6OBQ6wzgROs84DzrZOAw65jgKOvM4CDoAOQY6DDkDOhg5ADokOf05Lzn6OTo5+DlGOfU5UTnyOVw57zlmOew5cTnpOXw55jmIOeQ5kznhOZ853jmqOds5tjnYOcM51TnPOdI53DnKOYQ0zzmiNNM5vzTYOds03Dn5NOE5FTXlOTI16TlONe45ajXyOYY19zmiNfs5vTUAOtk1BDr1NQk6EDYNOio2EjpGNhc6YTYcOn42ITqaNic6tjYrOtI2LjrlNi469zYtOhE3LjowNzA6VDcyOnQ3MzqYNzU6vjc0Ot43NDr9Ny86DjglOik4JzpfOCY6ljglOqE4IzqvOCE6uTgfOsE4HTrJOBk60jgVOtw4EzrnOBA69DgOOgA5DDoMOQo6GDkHOiM5BTovOQM6OjkAOkQ5/jlPOfs5Wjn4OWU59TlvOfI5ejnvOYY57DmROek5nDnmOag54zm0OeA5wDndOc052jnZOdU5cjTZOZA03jmtNOI5yzTmOek06zkHNe85JDXzOUE19zldNfw5ejUAOpY1BDqyNQk6zjUNOuo1EjoFNhY6IDYbOjw2IDpXNiU6dDYrOpI2MTqvNjQ6xTY0OtI2MzreNjM67DYzOg43NDouNzY6Vjc6Ooc3PTqtNzw60zc8Ovc3OjoOODc6Njg3OoA4MTqZODE6pjgtOrM4Kjq+OCc6yDgjOtA4IDrXOBw64DgYOuo4Fjr1OBQ6ATkSOgs5DzoXOQ06IjkLOi05CTo4OQc6QzkEOk45AjpYOf85Yzn8OW05+Tl4OfY5gznzOY858DmaOe45pjnrObI56Dm+OeU5yjniOdc53zlgNOM5fzToOZ007Dm8NPA52jT0Ofk0+TkXNf05NDUBOlE1BTpuNQk6izUOOqc1EjrDNRY63zUbOvs1HzoWNiM6MjYoOk02LTprNjM6iTY5Oqk2Ojq5Njk6vjY6Or82PTq4Njg65jY4OgQ3OjojN086ZTdUOo03TTq3N0g68jdSOhc4YTpeOE06gjg4Opg4ODqlODY6tDgzOsE4LjrOOCo61zglOt44IDrmOBw67jgaOvk4GToDORc6DTkVOhY5EjohORA6LDkOOjc5DDpBOQo6TDkIOlY5BjpgOQM6azkAOnY5/TmBOfo5jDn4OZc59TmjOfI5rznwObs57TnHOeo51DnqOU407jluNPI5jjT2Oa00+jnNNP456zQCOgk1BjonNQo6RTUOOmM1EjqANRY6nTUbOro1HzrWNSM68jUnOg02KzopNjA6RjY1OmQ2OjqFNj46pDY/OrE2Pjq2Nj46sjZCOqk2PzrBNj860zZIOvE2VTopN1o6YzdZOpU3VTrKN246GThvOjw4aDptOEk6jThCOqQ4PTqyODk6wDg0OtA4MDrdOCs66DglOvI4IDr4OB06/zgcOgg5HDoQORk6FzkYOiA5FjoqORQ6NDkSOj85EDpJOQ46VDkMOl45CjpoOQc6czkEOn45ATqJOf85lTn8OaA5+jmsOfc5uDn1OcU58jnROfQ5PjT4OV40/Dl/NAA6nzQEOr80CDreNAs6/TQPOhs1Ezo6NRc6WDUbOnY1HzqTNSM6sDUnOs01KzrpNS46BTYyOiI2Nzo/Njs6XjZAOn82QzqbNkQ6qTZDOqo2RDqfNkU6nDZIOp82SDq0Nkw6wDZYOgA3XTpUN106jzdZOso3YToTOGc6RjhgOm44UjqPOEk6qThEOrQ4QDrCODw6zzg3OuA4MTrxOCo6/TgmOgo5IzoOOSE6DjkfOhM5HjoXORw6HzkbOig5GToyORc6PDkVOkc5FDpRORI6WzkQOmU5DjpvOQs6ejkIOoY5BjqROQM6nTkBOqk5/zm2Ofw5wjn6Oc85/jkuNAI6TzQGOnE0CjqSNA06sTQROtI0FTrxNBg6EDUcOi81IDpONSM6bDUnOoo1KzqoNS46xTUyOuE1NTr+NTk6HDY9Ojo2QTpZNkU6eTZHOpU2STqlNkg6pjZKOpw2SzqTNk06lDZROp82VDq4NmA62DZiOi03YjqCN2A6yjdgOgk4Yzo+OF86cDhZOo84UTqoOE06tjhIOsY4QzrSOD464jg4OvQ4MzoKOTA6GjkzOiE5KToZOSQ6FTkiOhg5IDoeOR86JjkeOjA5HDo6ORs6RDkZOk45FzpYORU6YTkTOms5ETp3OQ46gjkMOo45CjqaOQg6pzkGOrM5BDq/OQE6zDkJOiA0DDpBNBA6YzQTOoQ0FzqlNBo6xjQeOuY0IToGNSU6JTUoOkQ1KzpjNS86gTUyOp81Njq9NTk62jU8Ovg1QDoWNkM6NTZHOlQ2SjpzNkw6kDZOOqM2TTqmNk86nzZSOpA2VDqONlY6nTZbOrE2YzrUNmw6FzdqOm43ZDrHN2Q6CDhlOjY4YjplOGA6iDhbOqg4Vzq5OFI6yDhMOtg4RzrpOD86+zg8OhA5PToeOTk6HzkwOh85KzoaOSc6GjklOh45IzokOSI6LTkhOjY5IDpAOR46SjkcOlM5GjpdORk6ZzkXOnI5FTp/ORI6izkROpc5DzqkOQ06sDkLOr05CTrJORM6ETQWOjQ0GTpWNB06eDQgOpk0Izq6NCY62zQqOvw0LTobNTA6OjUzOlk1Njp5NTk6mDU9OrY1QDrUNUM68zVGOhE2STowNkw6TzZPOm42UTqLNlE6oTZTOqk2VTqlNlk6nDZbOpI2XTqcNmA6ujZnOtg2cDoVN3Q6YTduOrk3aToEOGk6MjhoOl84ZTqDOGQ6oDhfOrU4XTrNOFg63DhROus4Sjr/OEc6EjlDOiE5PjobOTc6GjkxOho5LjoZOSo6GzkoOiI5JjoqOSY6MzklOjw5IzpGOSI6TzkgOlg5HjpiORw6bjkbOns5GTqHORc6lDkVOqE5FDqtORI6ujkQOsc5HToENCA6JzQjOko0JjpsNCk6jjQsOrA0LzrQNDI68TQ1OhI1ODoyNTs6UjU+OnE1QTqRNUQ6sDVGOs81STruNUw6DTZOOis2UTpKNlM6aTZVOoY2VzqcNlc6rTZZOrI2XTquNmE6oTZlOqc2aDq7Nmw64jZxOg43djpdN3g6wzdzOgg4cjo5OG46XjhrOoA4aTqcOGc6sThkOsg4YzrbOF066jhWOvk4UToMOUo6FTlEOhQ5PToSOTg6Ezk0OhU5MToXOS46HTksOiU5KzouOSo6ODkpOkE5JzpKOSU6UzkkOl05IjppOSE6djkfOoM5HjqQORw6nTkbOqo5GTq3ORc6xDkmOu8zKToaNCw6PjQvOmA0MjqDNDU6pTQ3Osc0OjroND06CTVAOio1QjpLNUU6ajVIOoo1SjqqNU06yTVPOuk1UjoINlQ6JzZWOkY2WDpkNlo6gTZbOpw2XDqvNl06uzZgOrw2ZTq0Nmk6szZuOsg2czrpNnQ6Hzd4Olo3ejq5N3k6DDh2Ojg4cjpbOG86fDhtOpY4azqrOGo6vzhnOs84YzriOFw67zhXOvk4Tzr/OEg6BzlCOgY5PDoJOTg6Czk1OhA5MzoWOTE6HjkwOic5LzoyOS46OzksOkU5KzpOOSk6WTkoOmU5JzpyOSY6fzklOo05IzqaOSI6pzkhOrQ5HzrBOTA61zMzOg80NToyNDg6VjQ6Onk0PTqbND86vjRCOt80RDoBNUc6IjVJOkM1TDpjNU46gzVROqQ1UzrENVU65DVXOgQ2WTojNls6QjZdOmE2Xjp+Nl86mjZgOrM2YTrFNmI60DZnOs82bDrSNnE64zZ3OgA3fDooN3s6dDd7Org3ejoROHk6NDh1Olw4czp7OHE6kjhwOqc4bTq5OGo6xzhnOtU4YDrhOFo66ThTOuw4SzrzOEM69zg+Ovo4OTr+ODg6BTk3Ogw5NjoWOTU6IDk1Ois5Mzo2OTI6PzkxOkk5MDpUOS86YDkuOm05LTp7OSw6iTkqOpY5KTqjOSg6sTkmOr45Ojq/Mzw6BDQ+Oig0QDpMNEM6bzRFOpI0Rzq1NEo61zRMOvk0TjobNVE6PDVTOl01VTp+NVc6nzVZOr81WzrgNV06ADZfOiA2YDo/NmI6XjZjOnw2ZDqZNmQ6tjZlOs02ZTrfNmY67zZsOu82cToAN3c6Gjd+OkE3gTp+N3062zd+Og84fTo3OHo6XTh4Onc4dTqNOHM6oThwOrE4bjq8OGo6xzhkOtA4XTrYOFU63DhNOuA4RTrkOD465zg7Ou84OTr3ODo6ADk6Ogs5OToXOTk6Izk5Oi45ODo5OTc6RDk2Ok85NjpbOTU6aDk0OnY5MzqEOTI6kjkwOqA5LzqtOS46uzlDOqwzRTr2M0c6HzRJOkM0SzpmNE06ijRPOq00UTrQNFM68jRVOhU1Vzo2NVo6WDVcOnk1XTqaNV86uzVhOtw1Yjr8NWQ6HDZlOjw2ZjpbNmc6ejZoOpg2aDq1Nmg6zzZoOuQ2aTr3Nms6CDdvOho3dTozN306VzeBOok3hDrRN4Q6DDiDOi84gDpTOH06bzh6OoQ4djqWOHM6ozhwOq04azq1OGU6vjhfOsU4VzrKOE86zzhIOtM4QTrVOD063zg7Ouk4PDr0OD06ADk+Og05PjoaOT46Jzk9OjI5PTo+OT06Sjk8OlY5PDpjOTs6cTk6OoA5OTqOOTg6nDk2Oqo5NTq4OUw6mzNOOuQzTzoWNFE6OjRTOl80VTqCNFc6pjRZOsk0WzrsNFw6DzVeOjE1YDpSNWI6dDVkOpY1ZTq3NWc62DVoOvk1aToaNmo6OjZrOlk2bDp4Nmw6lzZsOrQ2bDrPNmw66TZsOgA3bDoaN206MTdyOks3dzpvN3w6nDd/OtI3gToHOII6JDiCOkM4fzpeOHw6dTh4OoQ4dDqROHA6mzhsOqQ4aDqtOGI6tThbOr04VDrDOE06yDhGOsw4QjrTOD863DhAOuc4QTr1OEI6AzlCOhI5QzofOUI6LDlDOjg5QzpFOUM6UTlCOl85QjptOUE6ezlAOok5PzqXOT46pjk9OrQ5VTqLM1Y60zNYOg40WTozNFs6VzRdOns0XjqfNGA6wjRiOuY0YzoJNWU6KzVnOk41aDpwNWo6kjVrOrQ1bDrVNW069jVuOhg2bzo4NnA6WDZwOnc2cTqWNnE6tDZwOtE2bzrtNm86CDdvOiQ3bjpBN286XTdyOn43dTqlN3g61Dd7OgI4fDoaOHw6Mzh7Oks4eTpfOHY6cDhzOn04cDqJOG46lDhrOp44ZzqoOGE6sThaOro4VDrAOE46xjhJOss4RjrSOEY63ThGOuw4SDr7OEg6CjlIOhg5SDolOUg6MjlJOj85STpMOUk6WjlIOmc5SDp2OUc6hTlGOpM5RTqiOUQ6sDleOn0zXzrGM2A6BzRiOiw0YzpQNGQ6dTRmOpk0Zzq9NGk64DRqOgQ1bDonNW06SjVuOmw1cDqPNXE6sTVyOtI1czr0NXQ6FjZ0Ojc2dTpXNnU6dzZ1OpY2dTq1NnQ60zZ0OvE2czoON3I6KzdxOkg3cDpmN3A6hDdyOqY3dDrKN3Y6+jd3Og84eTonOHg6PDh3Ok44djpfOHQ6bjhzOns4cTqHOG86kThrOp04ZjqpOGE6sjhbOro4VjrAOFI6xjhPOs04TTrXOE065ThNOvM4TToCOU06ETlNOh45TjosOU46OjlPOkc5TzpVOU46YjlOOnE5TTqAOU06jjlMOp05SzqsOWc6bzNnOrkzaDoBNGk6JjRrOko0bDpvNG06kzRuOrg0cDrbNHE6/zRyOiM1czpGNXU6aTV2Oow1dzquNXg60DV4OvI1eToUNnk6NTZ6OlY2ejp3Nno6lzZ5OrY2eTrVNng69DZ3OhI3djovN3Q6TDd0Omg3czqGN3I6pTdzOsg3dDrvN3Y6Cjh3Oh04eDowOHg6Qjh3OlM4dzpiOHY6bzh1Ons4cjqHOG86kzhsOqA4ZzqrOGI6tDheOrw4WjrDOFc6yjhVOtQ4VDrgOFM67jhTOvw4UzoKOVM6GDlTOiY5VDo0OVQ6QjlVOk85VDpdOVQ6bDlUOns5UzqKOVM6mDlSOqc5bzpkM3A6rjNwOvgzcTohNHI6RTRzOmo0dDqPNHU6szR2Otc0dzr7NHk6HzV6OkI1ezpmNXw6iTV9Oqs1fTrONX468DV+OhI2fjo0Nn46VjZ+Onc2fjqXNn46tzZ9OtY2fTr1Nnw6Ezd6OjA3eTpNN3g6aTd3OoU3djqiN3U6wTd1OuQ3djoCOHg6FDh5OiY4ejo3OHo6Rzh5OlY4eDpkOHc6cTh1On04czqKOHA6lzhsOqU4aDqvOGU6uDhiOsA4XzrJOFw60jhbOt04WTrqOFk69zhYOgU5WToTOVk6ITlaOi85Wjo8OVo6SjlaOlg5WTpmOVo6dTlaOoQ5WTqTOVk6ojl3OlszeDqkM3g67zN5Oh00ejpCNHs6ZjR7Oos0fDqvNH061DR+Ovc0fzocNYA6PzWBOmM1gjqGNYI6qTWDOsw1gzrvNYM6ETaEOjQ2gzpVNoM6dzaDOpc2gzq3NoI61zaBOvU2gDoTN386MDd+Ok03fTpqN3w6hTd7OqE3eTq+N3k63Dd6Ovs3ezoOOHw6Hzh8Oi84fDo+OHs6TTh6Olw4eTpoOHc6dTh2OoI4czqQOHA6nzhtOqo4azq0OGg6vThlOsc4YzrQOGE62jhfOuY4XzryOF46/zheOg05XjobOV86KTlfOjc5XzpFOV86UjlfOmA5XzpwOWA6fzlgOo45YDqdOX86VDOAOp4zgDroM4E6GjSBOj80gjpjNII6iDSDOqw0hDrQNIQ69DSFOhk1hjo9NYc6YTWHOoQ1iDqnNYg6yjWJOu01iToQNok6MzaJOlU2iDp3Nog6lzaHOrc2hzrXNoY69TaFOhM3hTowN4Q6TTeDOmo3gjqFN4E6oTd/Or03fzrZN3469zd+Ogs4fzoaOH86KTh+Ojg4fTpHOHw6VTh7OmI4ejpvOHg6fTh2Ooo4dDqZOHI6pThvOrA4bTq6OGs6xDhpOs44ZzrYOGU64zhkOu84ZDr7OGM6CDlkOhY5ZDokOWQ6MjlkOj85ZDpNOWU6WzllOmo5Zjp6OWY6iTlnOpg5hzpSM4c6mjOIOuUziDoXNIg6PDSJOmE0iTqFNIo6qTSKOs40izryNIs6FjWMOjo1jTpfNY06gjWNOqY1jjrJNY467DWOOg82jjoyNo46VDaNOnY2jTqXNow6tzaMOtY2izr1Noo6EzeKOjA3iTpNN4k6ajeIOoY3hzqiN4Y6vTeFOtk3hDr1N4M6CTiDOhg4gjomOII6NTiBOkM4fzpQOH46Xjh9Oms4fDp4OHo6hjh5OpQ4dzqhOHU6rDhyOrc4cDrBOG46yzhtOtU4azrgOGo66zhpOvc4aToEOWk6ETlpOh85ajotOWo6OjlqOkg5ajpWOWs6ZTlsOnQ5bTqEOW06kjmPOlAzjzqZM4864jOPOhY0jzo7NJA6XzSQOoM0kDqnNJE6zDSROvA0kjoUNZI6ODWSOl01kzqBNZM6pDWTOsc1kzrrNZM6DjaTOjA2kzpTNpM6dTaSOpY2kjq2NpE61jaQOvQ2kDoSN486MDePOk03jjpqN406hjeMOqI3izq+N4s62jeKOvY3iToJOIg6FziHOiU4hjozOIU6QTiDOk44gjpbOIE6aDh/OnU4fjqDOH06kDh7Op04eTqoOHg6tDh2Or44dDrIOHI60zhxOt04cDroOG869DhuOgA5bjoNOW86GzlvOig5bzo2OW86QzlwOlE5cTpgOXI6bzlzOn45dDqMOZc6TzOWOpgzljriM5Y6FjSWOjo0lzpeNJc6gjSXOqY0lzrKNJc67jSYOhI1mDo2NZg6WzWZOn81mTqiNZk6xjWZOuk1mToMNpk6LzaYOlE2mDpzNpg6lDaXOrU2ljrVNpY68zaVOhI3lDowN5Q6TTeTOmo3kzqGN5I6ojeROr43kDraN4869jeOOgk4jToXOIw6JTiLOjI4iTpAOIg6TTiGOlo4hTpnOIQ6dDiCOoE4gTqNOIA6mjh+OqU4fTqxOHs6uzh5OsY4eDrQOHc62zh2OuY4dTrxOHQ6/jh0Ogo5dToYOXU6JTl1OjI5djo/OXc6TTl4Olw5eTpqOXo6eDl7OoY5njpRM546mjOdOuMznToVNJ06OjSdOl40nTqCNJ06pjSdOsk0njrtNJ46ETWeOjU1njpZNZ46fTWeOqA1njrENZ466DWeOgs2njotNp46UDadOnE2nTqTNpw6szacOtM2mzryNpo6ETeaOi83mTpNN5k6ajeYOoY3lzqiN5c6vjeWOto3lTr2N5Q6CTiSOhY4kTokOJA6MjiOOj84jTpMOIs6WTiKOmY4iDpzOIc6fziGOow4hDqYOIM6oziCOq44gDq5OH86xDh+Os44fDrZOHs65Dh7Ou84ezr7OHs6CDl7OhU5fDoiOXw6Lzl8Ojs5fjpJOX86VzmAOmQ5gTpyOYI6gDmmOlQzpTqcM6Q64zOkOhY0pDo6NKM6XjSkOoI0ozqlNKQ6yTSkOu00pDoQNaQ6NDWkOlc1pDp7NaQ6nzWkOsI1pDrmNaQ6CTakOis2ozpONqM6bzaiOpE2ojqxNqE60TagOvE2oDoQN586LjefOks3njppN506hTedOqI3nDq+N5s62TeaOvU3mToIOJc6FjiWOiQ4lToxOJM6PjiSOkw4kDpZOI46ZTiNOnI4jDp+OIo6ijiJOpY4iDqhOIc6rDiGOrc4hDrCOIM6zTiCOtc4gjriOIE67jiBOvo4gToGOYI6EjmCOh85gzorOYQ6ODmFOkU5hjpSOYc6XzmIOmw5iTp5Oa06WTOsOp8zqzrmM6s6FzSqOjs0qjpfNKo6gjSqOqY0qjrINKo67DSpOg81qjoyNao6VjWqOno1qTqdNak6wTWpOuQ1qToHNqk6KTapOkw2qDptNqg6jjanOq82pzrPNqY67zalOg43pTosN6Q6SjejOmc3ozqEN6I6oDehOr03oDrZN5869DeeOgg4nToWOJs6IziaOjA4mDo+OJc6SziVOlg4lDplOJI6cTiROn04jzqJOI46lDiNOqA4jDqrOIs6tjiKOsA4iTrLOIg61jiIOuE4iDrsOIg6+DiIOgQ5iDoQOYk6HDmKOig5izo0OYs6QDmMOk05jTpZOY86ZjmQOnI5szpfM7I6pTOxOuozsToYNLA6PDSwOl80sDqDNLA6pjSvOsg0rzrrNK86DjWvOjE1rzpUNa86eDWvOps1rzq/Na864jWvOgU2rjonNq46STauOms2rTqMNq06rTasOs02qzrsNqs6DDeqOio3qTpIN6k6ZTeoOoI3pzqfN6Y6uzelOtc3pDrzN6M6BziiOhU4oDoiOJ86MDieOj04nDpKOJo6VziZOmM4lzpwOJY6fDiVOog4kzqTOJI6njiROqk4kDq0OI86vziPOso4jjrUOI463ziOOuo4jjr2OI46ATmPOg05kDoZOZE6JTmROjA5kjo8OZM6RzmUOlM5lTpfOZY6azm6OmczuTqrM7g67zO3Oho0tjo9NLY6YDS2OoM0tTqlNLU6yDS1Ouo0tToNNbU6MDW1OlM1tTp2NbQ6mjW0Or01tDrgNbQ6Aza0OiU2tDpHNrM6aTazOoo2sjqqNrI6yjaxOuo2sDoJN7A6KDevOkY3rjpjN606gDesOp03qzq5N6o61TepOvE3qDoGOKc6FDilOiI4pDovOKM6PDihOkk4oDpWOJ46YjidOm84mzp6OJo6hjiZOpI4mDqdOJc6qDiWOrM4lTq9OJQ6yDiUOtM4lDrdOJQ66DiUOvM4lTr/OJY6CjmWOhU5lzohOZg6LDmYOjc5mTpCOZo6TTmbOlk5nTplOcA6cDO/OrMzvjr3M706HTS8Oj80vDpiNLs6hDS7OqY0uzrINLs66jS6Og01ujovNbo6UjW6OnU1ujqYNbo6uzW6Ot41ujoBNrk6Iza5OkU2uTpmNrg6hza4Oqg2tzrINrY65za2OgY3tTolN7Q6QzezOmA3szp+N7I6mjexOrc3sDrTN6467zetOgU4rDoTOKs6ITipOi44qDo7OKc6SDilOlU4pDphOKI6bTihOnk4nzqFOJ46kDidOps4nDqmOJs6sTibOrw4mjrGOJo60TiaOtw4mjrmOJo68TibOvw4nDoHOZw6EjmdOh05njonOZ86MjmfOj05oDpIOaI6UzmjOl45xjp7M8U6vTPDOgA0wzohNMI6QjTBOmQ0wTqFNME6pjTAOsg0wDrqNMA6DTXAOi81wDpRNcA6dDW/OpY1vzq5Nb863DW/Ov41vzogNr46Qja+OmM2vjqENr06pTa8OsU2vDrlNrs6BDe7OiI3ujpAN7k6Xje4Ons3tzqYN7Y6tDe1OtE3tDrtN7M6BDixOhI4sDogOK86LTitOjo4rDpHOKo6UzipOmA4qDpsOKY6eDilOoM4pDqPOKI6mjiiOqU4oTqwOKA6ujigOsU4oDrPOKA62jigOuQ4oDrvOKE6+TihOgQ5ojoOOaM6GTmjOiM5pDotOaU6ODmmOkI5qDpNOak6VznMOogzyjrHM8k6BDTIOiU0xzpFNMc6ZjTGOoc0xjqoNMY6yTTFOuo0xToMNcU6LjXFOlA1xTpyNcU6lDXFOrc1xDrZNcQ6+zXEOh02xDo/NsM6YDbDOoE2wjqiNsI6wjbBOuI2wToBN8A6Hze/Oj03vjpbN706eDe8OpU3uzqyN7o6zje5Ouo3uDoDOLc6ETi1Oh44tDosOLM6OTixOkY4sDpSOK46XjitOmo4rDp2OKo6gjipOo04qDqYOKc6ozimOq44pjq5OKU6wzilOs04pTrYOKY64jimOuw4pjr2OKc6ADmoOgs5qDoUOak6HjmqOig5qzoyOaw6PTmtOkc5rzpROdE6lDPQOtMzzjoJNM06KDTNOkg0zDpoNMs6iDTLOqk0yzrKNMs66jTKOgs1yjotNco6TzXKOnA1yjqSNco6tDXKOtY1yjr4Nck6GjbJOjw2yTpdNsg6fjbIOp82xzq/Nsc63zbGOv42xTocN8Q6OzfEOlg3wzp1N8I6kjfBOq83wDrLN7865ze9OgI4vDoPOLs6HTi5Oio4uDo3OLc6RDi1OlE4tDpdOLM6aTixOnU4sDqAOK86jDiuOpc4rTqiOKw6rDisOrc4qzrBOKs6zDirOtY4qzrgOKw66jisOvQ4rDr9OK06BzmuOhA5rjoaOa86JDmwOi05sTo3ObM6QTm0Oko51jqiM9U63jPTOg400josNNE6SzTROmo00DqJNNA6qTTQOso00DrqNNA6CzXQOiw1zzpNNc86bjXPOpA1zzqyNc861DXPOvU1zzoXNs46OTbOOlo2zjp7Ns06nDbNOrw2zDrcNss6+zbLOhk3yjo4N8k6VjfIOnM3xzqQN8Y6rDfFOsg3xDrkN8M6ADjCOg44wDobOL86KTi+OjY4vDpDOLs6Tzi5Ols4uDpnOLc6czi1On84tDqKOLM6lTiyOqA4sjqrOLE6tTixOsA4sTrKOLE61DixOt44sTrnOLE68TiyOvo4sjoEObM6DTm0OhY5tDofObU6KDm3OjI5uDo7Obo6RDnbOrEz2TrrM9g6EzTXOjA01jpONNY6bDTVOoo01TqqNNU6yjTVOuk01ToJNdU6KjXVOks11TpsNdU6jTXVOq811DrRNdQ68zXUOhQ21Do2NtM6VzbTOng20jqZNtI6uTbROtg20Tr4NtA6FjfPOjU3zjpTN806cDfMOo03yzqpN8o6xTfJOuE3yDr9N8c6DDjGOho4xDonOMM6NDjCOkE4wDpOOL86Wji+OmY4vDpyOLs6fTi6Ook4uTqUOLg6nzi4Oqk4tzq0OLc6vji2Osg4tjrSOLY63Di2OuU4tzruOLc69zi3OgA5uDoJObk6Ejm5Ohs5ujokObw6LTm9OjU5vzo+Od86vzPdOvcz3DoXNNs6MzTbOlA02jptNNo6izTaOqo02jrJNNo66TTaOgg12jooNdo6STXaOmo12jqLNdo6rTXaOs412jrwNdk6ETbZOjM22TpUNtg6dTbYOpU21zq1Ntc61TbWOvU21ToUN9Q6MjfTOlA30zpuN9I6ijfROqc30DrDN8863zfOOvo3zDoLOMs6GDjKOiY4yTozOMc6QDjGOkw4xTpZOMM6ZTjCOnA4wTp8OMA6hzi/OpI4vjqdOL06qDi9OrI4vDq8OLw6xji8OtA4vDraOLw64zi8Ouw4vDr1OLw6/ji9OgY5vToPOb46Fzm/OiA5wDooOcI6MDnDOjk54zrOM+I6ATTgOhw04Do3NN86UjTfOm803zqMNN86qjTfOsg03zrnNN86BzXfOiY13zpHNd86aDXfOog13zqqNd86yzXfOu013zoONt46LzbeOlA23jpxNt06kjbdOrI23DrSNts68TbbOhA32jovN9k6TTfYOms31zqIN9Y6pDfVOsA31DrcN9M6+DfSOgk40ToXONA6JDjOOjE4zTo+OMw6SzjKOlc4yTpjOMg6bzjGOns4xTqGOMQ6kTjEOpw4wzqmOMI6sDjCOrs4wTrEOME6zjjBOtg4wTrhOME66jjBOvM4wTr7OMI6BDnCOgw5wzoUOcQ6HDnFOiQ5xjosOcg6NDnnOtwz5ToHNOQ6IDTkOjo04zpUNOM6cDTjOow04zqpNOQ6xjTkOuU05DoENeQ6JDXkOkQ15DplNeQ6hjXkOqc15DrINeQ66TXkOgs25DosNuM6TTbjOm024zqONuI6rjbhOs424TruNuA6DTffOiw33jpKN906ZzfdOoU33DqiN9s6vTfaOtk32Tr1N9c6CDjWOhY41TojONQ6MDjSOj040TpJONA6VjjOOmI4zTpuOMw6eTjLOoQ4yjqQOMk6mjjIOqU4yDqvOMc6uTjHOsM4xjrMOMY61jjGOt84xjroOMY68TjGOvk4xzoBOcc6CTnHOhE5yDoZOck6IDnKOic5zDovOeo66jPpOgw06DokNOc6PTTnOlY05zpwNOg6izToOqg06DrENOk64zTpOgI16TohNek6QTXqOmI16jqCNeo6pDXqOsU16jrmNeo6BzbpOig26TpJNuk6ajboOos26DqqNuc6yjbmOuo25joJN+U6KDfkOkc34zpkN+I6gjfhOp834Dq7N9861zfeOvI33ToHONw6FDjbOiE42TouONg6OzjXOkg41TpUONQ6YTjTOmw40jp4ONE6gzjQOo44zzqZOM46pDjNOq44zTq4OMw6wTjMOss4zDrUOMs63TjLOuY4yzrvOMs69zjLOv84zDoHOcw6DjnMOhY5zTodOc46IznQOio57Tr4M+w6ETTrOic06zo+NOs6VjTsOnA07DqKNO06pjTtOsI07TrgNO46/zTuOh417zo+Ne86XjXvOn817zqgNe86wTXvOuI17zoENu86JTbvOkY27jpmNu46hzbtOqc27TrHNuw65zbrOgY36zolN+o6RDfpOmE36Dp/N+c6nDfmOrg35TrUN+Q67zfjOgU44joTOOA6IDjfOi043jo6ON06RzjbOlM42jpfONk6azjYOnc41zqCONU6jTjVOpg41DqiONM6rTjSOrc40jrAONE6yjjROtM40TrcONA65TjQOu040Dr1ONA6/TjQOgU50DoMOdE6EznROho50jogOdM6JjnwOgI07zoVNO46KTTvOj407zpVNPA6bjTwOog08TqjNPI6vzTyOt008zr7NPM6GjX0Ojo19DpbNfQ6ezX1Opw19Tq+NfU63zX1OgA29DohNvQ6Qjb0OmI28zqDNvM6ozbyOsM28jrjNvE6AzfwOiI38DpAN+86XzfuOnw37TqZN+w6tTfrOtI36jrtN+k6BDjoOhI45jofOOU6LDjkOjk44zpGOOE6UjjgOl443zpqON06djjcOoE42zqMONo6lzjZOqI42TqsONg6tjjXOr841zrJONY60jjWOts41TrkONU67DjVOvQ41Tr8ONQ6AznUOgo51ToROdU6FznWOh051zoiOfI6CDTxOhc08jopNPI6PTTzOlM09DprNPU6hTT2OqA09zq8NPc62TT4Ovc0+ToWNfk6NjX5OlY1+jp3Nfo6mDX6Ork1+jrbNfo6/DX6Oh02+jo+Nvo6Xjb5On82+TqfNvg6wDb4OuA29zoAN/Y6Hzf1Oj439TpcN/Q6eTfzOpc38jqzN/E6zzfwOus37zoDOO46EDjtOh446zorOOo6ODjpOkU45zpROOY6XTjlOmk44zp1OOI6gDjhOos44DqWON86oTjeOqs43jq1ON06vzjcOsg43DrRONs62jjbOuM42jrrONo68zjZOvs42ToCOdk6CTnYOhA52DoWOdk6GznZOh85PDDgM0UwzjNQML0zXDCrM2kwmTN4MIcziDB3M5owZjOtMFYzwjBHM9gwOTPwMCszCTEeMyMxFTM+MQwzWzEFM3gx/zKXMfwytjH6MtYx/TL2Mf8yFzICMzgyCTNbMhMzfjIeM6MyLjPIMj4z7TJRMxIzZTM5M3szXzOSM4czrDOvM8Yz1zPjMwA0ADQVNBA0KTQgND40MTRTNEM0aDRWNHw0ajSQNH00pTSSNLk0pzTNNL004DTSNPQ06DQHNf40GjUVNSw1LDU9NUM1TzVZNV81cTVvNYg1fjWfNYw1tTWaNcs1pjXiNbE19zW7NQw2xDUgNsw1NDbTNUU2MjDDMzswqjNGMJMzUjB9M2AwaDNvMFMzfzBAM5EwLDOlMBszujAKM9Aw+zLoMOwyATHdMh0x0DI5McYyVjG9MnQxtzKUMbMyszGwMtQxrzL1MbIyFzK4MjkywDJdMsgygTLUMqYy4jLNMvQy8zIHMxkzGzNBMzIzaTNKM5IzZDO7M38z5TOcMwc0ujMcNNszMTT9M0c0EDRcNCM0cTQ2NIY0SzSaNF80rzR1NMM0izTXNKE06zS3NP40zjQSNeU0JDX9NDY1FTVHNS01WTVFNWk1XTV5NXU1hzWNNZU1pTWiNbw1rTXTNbg16jXBNQA2yjUWNtE1KzbXNT42IzCjMy4whjM6MGozRjBQM1UwODNkMCAzdDAJM4cw8zKbMOAysDDNMscwuzLfMKsy+DCdMhQxjjIyMYEyTzF3Mm4xbzKOMWkyrzFlMtAxZTLzMWcyFjJsMjkydDJeMn0yhDKHMqoyljLRMqgy+DK7MiAz0jJJM+gycjMCM50zHTPHMzYz8jNVMw40dDMkNJUzOjS4M0803jNlNAM0ejQWNJA0KzSkNEA0uTRXNM40bjTiNIQ09jScNAk1tDQcNcw0LzXlNEE1/jRSNRc1YzUwNXM1STWCNWI1kTV7NZ41lDWqNa01tTXFNcA13TXINfU10DUMNtc1IjbdNTg2EzCBMx4wYDMrMEEzODAjM0cwBzNXMOwyaDDTMnswuzKPMKUypTCQMrwwfTLVMGoy7zBaMgsxSzIpMT0yRzExMmcxKDKIMSIyqTEcMswxGzLwMR0yFTIiMjkyKDJfMjAyhTI8MqwySTLUMlwy/TJtMiczgzJRM5wyfDO2Mqgz0TLUM+4yADQMMxY0LTMsNE4zQjRzM1g0mjNuNMMzhDTsM5o0CzSvNCE0xTQ4NNk0UDTtNGg0AjWBNBU1mjQoNbM0OjXNNEw15zRdNQE1bTUcNX01NjWMNVA1mjVqNac1hDW0NZ41vjW3Ncg10TXQNeo12DUCNt41GzbkNTI2ADBeMwwwOTMaMBYzKDD1Mjcw1TJIMLgyWjCcMm0wgjKCMGoymDBTMrAwPTLKMCoy5TAXMgIxBzIgMfgxPzHrMV8x4TGAMdgxozHTMccx0jHrMdQxETLYMTcy3jFeMuUxhjLwMa4y/THYMg4yAzMhMi4zNzJaM1AyhjNrMrMzhjLgM6MyBzTDMh404zI1NAczSzQtM2E0VTN4NH8zjjSqM6Q01jO6NAI00DQaNOU0MjT5NEs0DTVlNCE1fzQ0NZo0RjW0NFg1zzRpNeo0eTUHNYg1IjWXNT01pTVYNbI1czW+NY81yTWqNdI1xDXaNd414TX5Nec1EjbsNSo22C85M/IvEDMHMOoyFjDGMiYwpDI3MIQySjBmMl4wSjJzMC8yijAWMqMw/zG9MOgx2TDVMfYwxDEUMbMxNDGlMVYxmjF4MZExmzGKMcExiDHmMYkxDTKMMTQykTFdMpYxhTKiMa8ysDHaMsExBzPUMTQz6zFhMwQykDMfMr4zOjLtM1kyDjR5MiY0mjI+NL8yVTTmMms0DzOCNDszmTRmM7A0lDPGNMMz3DT0M/E0FDQGNS40GjVINC01ZDRANYA0UzWcNGQ1uDR1NdQ0hTXyNJQ1DjWjNSs1sTVINb41ZDXJNYA11DWcNd01uDXkNdM16zXvNfA1CTb2NSM2rS8UM8gv6DLmL78yAjCXMhMwcjIlME8yODAuMk0wEDJjMPQxezDYMZQwwDGvMKgxyzCSMekwfzEIMWwxKDFeMUsxUjFuMUgxkjFAMbgxPTHgMTwxCDI+MTAyQzFaMkoxhTJUMbAyYzHdMnMxCzOHMToznzFpM7cxmTPSMckz7jH7Mw4yFjQvMi40UTJGNHgyXzSeMnY0yTKNNPUypDQiM7w0UTPSNIIz6TS0M/406TMTNQ80JzUsNDs1SDRONWY0YDWDNHE1oDSCNb40kjXcNKA1+jSvNRg1vTU2Nco1VDXVNXE13zWONeg1qzXvNck19TXlNfs1ATYANhs2fy/tMpsvvjK7L5My3C9pMv4vQTISMBsyJjD4MTsw1zFRMLgxaTCaMYMwgDGeMGYxuzBPMdowOjH5MCcxGjEWMT4xCTFiMf4wiDH3MK8x8jDXMe8wATLvMCsy9TBWMvwwgzIGMbAyFDHfMiUxDTM6MT4zUTFwM2oxozOFMdQzojEENMExHTTkMTc0BzJQNC0yaTRWMoE0gDKZNK4ysTTcMsg0DjPfND8z9TR0Mws1qjMgNeMzNTUPNEk1LDRbNUs0bjVqNH81iDSQNac0nzXHNK415jS8NQY1yjUlNdY1QzXiNWI16zWBNfQ1oDX7Nb41ATbcNQY2+DULNhQ2Ty/HMm0vlTKNL2cyry86MtQvDzL5L+cxETDAMScwnTE9MHwxVjBdMXAwQDGLMCQxqTALMcgw9TDpMOEwCzHPMDAxvzBUMbMwezGqMKQxpTDOMaEw+DGjMCUypzBSMq0wgTK5MLAyxTDhMtYwEjPrMEQzAjF4MxsxqzM3MeAzVDELNHUxJTSXMUA0uzFaNOMxdDQNMo00ODKmNGYyvjSXMtY0yTLtNP0yAzU0Mxk1bDMvNaUzRDXjM1g1EDRqNS80fDVPNI41cDSeNZE0rTWxNLs10jTKNfM01zUTNeQ1MzXvNVQ1+DV0NQE2lTUINrM1DTbSNRI27zUXNgs2HC+gMjwvbDJcLzoyfy8KMqUv3THML7Ix9S+JMREwZDEoMEAxQTAfMVswADF3MOMwlTDIMLUwsDDWMJow+TCIMB4xdzBFMWkwbTFgMJcxWTDCMVUw7zFWMB0yWjBMMmAwfDJqMK4ydjDhMocwFTObMEoztDCAM84wtjPpMO0zBzESNCcxLjRKMUk0cDFlNJcxfzTCMZo07jGzNB4yzDRRMuQ0hDL7NLkyEjXyMik1LDM+NWgzUzWnM2c16DN5NRQ0izU2NJ01VzStNXk0vDWbNMo1vjTZNeA05jUCNfI1IzX9NUU1BjZnNQ42iTUVNqk1GzbJNR825zUkNgM25i55MgYvQjIpLw4yTC/bMXIvqjGbL34xxS9SMfEvKjERMAQxKjDhMEQwwDBhMKIwfzCFMKAwbDDCMFUw5jBAMAwxLzAzMSAwXTEVMIgxDTC0MQkw4zEKMBQyDjBFMhQwdzIbMKsyKDDgMjowFzNOME8zZjCHM38wwTOcMPozujAaNNswNzT9MFM0IzFwNEsxjDR1Mac0pTHBNNYx2zQJMvM0PjILNXcyIzWwMjk17DJONSozYzVrM3Y1rjOJNfEzmzUbNK01PjS9NWE0zDWFNNs1qTToNc009TXxNAE2FDULNjc1FTZaNRw2fjUjNp81KTbBNS023TUyNvo1ri5SMs8uGTLyLuExFS+sMTwveTFlL0kxkS8bMb4v8TDuL8kwETCkMCwwgDBIMGIwZzBEMIkwKDCsMBAw0DD1L/cwzy8gMbEvSjGZL3cxhy+lMYAv1TGDLwgyhC86Mo8vcDKcL6cyti/fMtgvGTP/L1QzFzCPMy8wyzNLMAQ0azAiNIwwQDSvMF401jB8NP4wmTQqMbU0WzHQNI0x6jTCMQM1+DEcNTIyNDVtMko1qzJfNewydDUuM4c1dDOaNbozrDUBNL01JTTONUk03TVvNOw1lTT5Nbs0BTbgNBE2BTUbNio1JDZONSs2cjUyNpY1Nza4NTw21DVANvI1ci4qMpQu7zG3LrUx3C59MQMvSDEsLxQxWS/kMIYvtzC2L44w6y9nMBEwQjAuMCEwTjABMG8wyy+TMJcvuDBrL+AwRS8JMSQvNTEKL2Qx9y6UMe4uxjHrLvox7i4wMvYuaDIGL6EyHi/dMj8vGjNlL1czkC+YM8Qv1zP7Lws0GzArNDwwSzRfMGo0hzCJNLIwpjTfMMM0EDHgNEQx+zR6MRQ1sTEtNewxRjUoMlw1aTJyNawyhjXwMpo1NzOsNYEzvjXLM881DDTfNTM07zVZNP01gTQKNqg0FjbQNCE29jQrNhw1NDZCNTs2ZzVCNos1RzauNUs2zDVPNuk1NC4CMlUuxTF5Logxni5OMcUuFjHwLuEwHC+uMEkvfzB8L1QwsS8qMOgvBDARMMQvMjCCL1MwSC94MBQvnjDkLscwui7xMJYuHjF7Lk0xaS5/MV0uszFYLuoxWi4jMmQuXjJyLpoyiC7ZMqcuGjPMLl0z+C6fMygv4zNeLxM0mS81NNkvVjQQMHY0ODCXNGMwtTSSMNM0wzDwNPgwDDUvMSc1aTFANaUxWDXkMW81KDKFNWwymjWzMq01/TK/NUkz0TWXM+I15zPyNRs0ATZENA82bjQcNpc0KDbANDI26DQ8NhA1RTY3NUw2XDVSNoE1VzakNVs2wzVfNuI18y3bMRMunDE2Ll4xXC4gMYQu5TCuLq0w3C55MAovRzA8Lxowci/dL6ovji/mL0UvEzACLzUwxS5ZMI0ugDBdLqowMS7VMAkuAzHtLTUx2S1oMcwtnjHGLdcxxy0TMtAtUTLeLZEy9S3UMhEu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3i0tOpotGTpfLQY6JS30OfIs4znCLNM5lizDOW8stDlKLKU5HjdKOhM3YDoIN3U6/DaLOvA2nTrlNq862za+OtM2yjrKNtM6wjbbOrg24TquNuY6ozbqOpg27jqMNvE6fzbzOnI29TpkNvg6Uzb6OkI2/TowNv86HTYCOwg2BDvxNQg71jUNO7g1EzuWNRw7cDUnO0E1NTsNNUk70TRhO5Q0fjtXNJ47IjSqO98zrjuIM647ODOsO+0ypzuoMp87YzKWOx0yiDvLMXM7ejFlOxsxTDvCMEc7bDA4Ox4wLDu/LxQ7VC/gOu8uuTqVLps6Qy5+OvEtZTqsLU06Yy03OiItIzrsLA86uCz9OYMs6jlWLNo5LSzJOQksujnKK6s5NTdOOio3ZTofN3w6FDeTOgo3qToAN7w69jbJOu821jroNt864DbmOtg26zrONvA6xTb0Orw2+DqyNvs6pjb+Ops2ADuMNgI7fTYFO242BztfNgo7TjYNOzo2DzslNhM7CzYYO+01HzvONSg7pzU1O3s1RTtDNV07BjV8O8A0qDt1NO87OTTtO+cz6TuMM+Y7PDPjO/My4DuvMt07cTLcOzQy2jv0Mds7sjHcOy4xzzu3MMk7KjDGO1gvvDsbLyk7ty7vOlQuxzoALqc6sy2JOmctbzojLVc64ixAOqYsLDpqLBg6OSwEOgws8jnIK+A5eyvPOTcrvzn4KrA5TDdSOkI3azo5N4U6LjeeOiQ3tTobN8k6FDfXOg434joIN+o6AjfwOvo29jryNvs66jb+OuA2AjvYNgU7zDYHO8M2Cju3Ng07qzYPO502ETuPNhQ7gTYWO3A2GTtbNh07RDYiOyo2KTsMNjQ75zVBO7w1VDuKNW47TzWPOwg1vTu/NPM7Bi7FOyUuLDvpLfw6nC3SOlMtsToRLZQ6yCx6OoosYTpQLEk6Giw0Os4rIDpzKww6ICv5OdEq5zmQKtU5UyrFORsqtTlkN1Y6WzdxOlM3jTpKN6c6QTfAOjo31DozN+I6LjftOik39TolN/o6HzcAOxg3BDsRNwg7CTcLO/82Djv4NhE78DYTO+Y2FjvbNhg7zzYaO8I2HDu1Nh47pjYhO5Q2JTuANis7aTYzO042PTsvNks7CTZeO941eTuqNZo7bDXEOzI19jsoLcI7OC0/Ow8tBjvOLNw6mCy6OlgsnDohLII61itpOm4rUToNKzw6sionOl4qEzoVKv851SnsOZwp2zlkKco5Nim6OX83WTp4N3Y6cDeUOmg3sTpgN8o6WjfeOlU37TpRN/g6Tjf+Oko3AztGNwg7QDcMOzw3EDs1NxM7LjcWOyc3GTsfNxs7FzcdOw83IDsGNyI7+zYkO/A2JjviNik70zYtO8I2MzuvNjs7mDZGO4E2VDthNmg7OzaBOxA2oTvaNco7pTX5OzUsyTs9LEc7JCwRO/Yr5TqKK8M6KCulOs8qiTp8KnA6IypYOs0pQjqDKS06OSkYOv0oBTrJKPI5lyjgOWsozjk/KL45mzdeOpY3ezqQN5o6ije5OoQ30jp+N+Y6ezf2Ong3/zp2NwU7czcKO283DztsNxM7aDcXO2M3GjteNx07WDcgO1I3IjtMNyQ7RDcmOz43KTs1Nys7LTctOyM3MDsWNzQ7CDc6O/k2QjvnNkw71DZbO742bjuiNoc7gzalO1c2zDskNvs7iirHO4sqUzttKhQ7ECrsOr4pyjp3Kas6QCmPOvwodTrDKF06fShHOkUoMjoOKB06yycKOl8n9zkBJ+U5tibTOYImwjm6N186tzd/OrQ3nzqwN706qzfXOqQ36zqkN/s6oTcEO6A3CjugNw87nTcTO5s3GDuXNxs7kzcfO5E3IjuMNyU7iDcnO4Q3KTt/Nys7ezcuO3U3MDtuNzI7Zzc1O1w3OTtSNz87STdHOz43UTsyN2A7IjdzOxM3izv9Nqo73TbQO7o2/Tt8KMo7dyhUO1goGzsPKPE6wSfROlgnsTr+JpQ6uyZ7OmwmYzoUJkw6zyU3OoMlIjpAJQ46+ST7Ob0k6DmIJNY5YyTFOds3YTrZN4E61jeiOtY3wDrUN9k60TfuOtA3/TrONwc7zTcNO8w3ETvLNxY7yjcaO8k3HjvHNyI7xTclO8M3JzvBNyo7vzcsO7w3Lzu5NzE7tjczO7I3NjuvNzk7qjc9O6Q3QjueN0o7ljdUO5I3YjuLN3U7gTeOO3Y3rDtlN9I7UTf+O8EkyTvBJFg7jSQaO1Ek9DoYJNQ6rCOzOjAjlzoLI346vCJlOoUiUDo7Ijs6yyEmOnMhETorIf456iDrOb0g2TmSIMg5ADhhOgA4gToAOKQ6ADjDOgA42jr/N+46/zf9Ov83CDv+Nw07/jcSO/43Fzv9Nxs7/TcfO/03Ijv8NyY7/DcoO/w3Kzv8Ny07+zcwO/s3Mjv7NzU7+zc3O/o3Ojv6Nz87+jdEO/k3TDv5N1Y7+DdkO/c3djv2N4879DeuO/I31DvvN/879xXLO2YVWDszFR475hT1OrgU1TqHFLQ6VRSZOiUUgTrsE2g6nhNROlkTPDoYEyg61RITOpoSADpgEuw5KxLaOfURyDkTOGE6FDiBOhU4oToVOL86FjjZOhc47joXOP06FzgGOxg4DDsYOBE7GDgVOxg4GjsZOB47GTgiOxo4JTsbOCg7GzgqOxw4LTsdOC87HzgyOyA4NDsiODY7Izg5OyU4PjsoOEM7KzhKOy44VDsvOGM7Mjh2OzY4jjs5OK07QDjTO0c4/zvgO8k73ztZO+E7GjviO/U65DvUOuY7tDroO5g66Dt+Ouk7ZjrqO1A66zs7Ouw7JjruOxI67zv+Oe877DnwO9k58TvIOSM4XzolOH86JjifOig4vToqONc6LTjqOi04+jouOAM7LzgJOy44DjsvOBM7MDgXOzE4GzszOB87NDgiOzY4JTs4OCc7OjgqOzw4LDs+OC87QTgxO0Q4NDtHODc7TTg7O1E4QDtVOEg7WjhSO2A4YTtnOHQ7bTiMO3Y4qzuFONE7lDj+O747zDu9O1Y7vzscO8Q78zrGO9I6yTuyOsw7lTrOO3w60DtkOtM7TTrVOzg61zsjOtk7DzrbO/w53TvqOd871zngO8Y5MzheOjU4ezo4OJo6Ozi5Oj440TpAOOY6QTj1OkI4/jpDOAQ7RTgJO0Y4DjtHOBM7STgXO0w4GjtOOB07UDggO1M4IztWOCU7WjgoO104KjthOCw7ZTgvO2k4MjtwODY7djg7O344QzuGOE07jzhcO5o4bzumOIk7tTinO8k4zjviOP07nDvJO5w7VTudOxY7ozvuOqg7zDqsO606sDuROrQ7dzq3O186vDtJOr87NDrCOx86xTsMOsg7+TnLO+Y5zTvUOc87wzlBOFk6RDh3Okg4lDpMOLE6UDjKOlI43jpUOOw6Vjj3Olc4/TpZOAI7WzgIO104DDtfOBA7YjgUO2Y4FztpOBo7bTgcO3E4Hzt1OCE7eTgkO344JjuEOCg7ijgrO5I4LzuaODU7ozg9O644SDu5OFY7yThqO9s4gzvvOKM7CjnMOyQ5+zt+O8s7fDtKO387EzuEO+c6izvGOpE7qDqWO4s6mztyOqE7WjqmO0Q6qzsvOq87GjqzOwc6tjv0Obk74jm8O9E5vzvAOU44VzpTOHE6VziNOls4qDpfOME6YzjUOmY44jpoOO06ajj0Omw4+jpuOAA7cjgEO3U4CTt5OAw7fTgPO4E4EjuFOBU7iTgYO484GjuUOBw7mzgfO6E4ITupOCQ7sTgoO7s4LTvGODU71DhAO+M4Tjv1OGE7Czl8OyQ5nDtDOcY7YDn5O147xTtcO0I7YTsJO2k73jpwO706eDufOn87hTqFO2w6jDtUOpI7PjqYOyk6nTsVOqE7AjqlO+85qTvdOaw7zTmvO7w5WzhSOl84azpkOIU6aTifOm44tTpyOMk6dTjXOng44jp7OOs6fTjxOoE49zqFOPs6iDgAO404AzuROAY7lzgJO5s4DDuhOA87pzgRO604FDu0OBY7uzgZO8Q4HDvOOCA72TglO+Y4LDv1ODY7BzlEOx05Vjs1OXE7UzmSO3c5wDudOfY7QjvIOz07LztFO/46TzvVOlg7tDpgO5c6aTt9OnE7ZDp4O0w6fzs3OoY7IzqLOw86kDv8OZU76jmZO9g5nTvIOaE7uDlmOE46azhlOnE4fTp2OJQ6eziqOoA4vTqEOMo6hzjXOos44DqOOOc6kjjsOpc48TqbOPY6nzj6OqQ4/TqqOAA7rzgDO7Y4BTu+OAc7xTgKO804DTvVOBA73zgTO+o4Fjv2OBs7BTkiOxQ5KzsoOTg7PjlIO1k5YDt4OX87nDmsO8Q58jviOfE7BjrtOx066jsxOuc7RDrkO1U64TtkOt87czrdO4Q63juUOt87tTrSO9M6yzv3Osg7Fzu/Ox47LDsqO/I6NzvKOkI7qjpLO4w6VTtyOl47WjpmO0Q6bTsvOnU7Gzp7Owg6gTv1OYY75DmKO9M5jzvDOZM7tDlxOEo6dzhgOnw4djqCOIw6iDifOo04sDqSOL86ljjLOpk41TqeONw6ojjiOqc46DqsOOw6sTjwOrc48zq9OPU6xDj4Oss4+jrTOP062zgAO+Q4AjvuOAU7+DgIOwQ5DDsRORE7IDkXOzE5HztEOSo7Wzk5O3U5TDuTOWQ7szmCO9I5ojvuOa47BzqzOx46sjsyOrA7RDqqO1Y6oztnOpk7eTqKO406dTuhOmc7uDpOO886SDvkOjo7+TouOwg7FjsWO+M6Izu8Oi87njo5O4I6QztoOkw7UTpVOzs6XjsmOmQ7EzprOwA6cjvuOXc73Tl8O805gTu+OYU7rzl8OEc6gjhbOog4bzqOOII6lDiUOpo4pTqfOLM6ozi/Oqg4yTqsONI6sTjYOrY43Tq7OOI6wTjmOsc46TrPOOs61jjuOt448DrmOPM67zj1Ovk4+DoDOfs6Djn+Oho5ATsoOQY7ODkLO0o5EjteORw7dDkoO445NjuoOUg7wzlcO905bTv1OXo7CzqAOyA6gzszOoI7RDp+O1U6djtnOm47eDpgO4s6UDufOjw7szoqO8c6GjvYOg476Tr/Ovk66joGO9M6EzutOh47kDoqO3Q6NDtdOj07RjpGOzE6TjsdOlY7CjpdO/g5ZDvnOWk71zlvO8c5dDu4OXk7qTmIOEM6jjhWOpQ4aDqaOHo6oDiLOqY4mzqrOKg6sDi0OrU4vzq5OMc6vzjOOsQ40zrKONc60DjbOtc43jrfOOE65zjjOu845jr4OOg6AjnrOgw57joXOfA6IznzOjA59jo+Ofo6TTn/Ol85BTtzOQw7iTkWO6E5ITu4OS47zzk7O+U5Rzv7OVE7DzpYOyI6WzszOls7RDpYO1U6UjtlOks7dzpAO4k6MTubOh87rToKO786+zrQOus63jrcOuw6yTr5OrQ6BTuZOhE7fzocO2c6JztROjA7PDo5Oyc6QTsUOkg7AjpQO/A5VzvgOV070DljO8A5aDuxOW07ozmTOD86mThROp84YjqlOHM6qziDOrE4kTq3OJ46vDiqOsE4tDrHOLw6zTjDOtM4yDrZOM063zjROuc41DrvONY69zjYOgA52zoKOd06EzngOh454joqOeQ6NjnnOkM56jpROe46YTnyOnI59zqFOf06mjkEO685DDvEORY72jkgO+45KTsBOjE7Ezo2OyQ6OTs0Ojk7RDo2O1Q6MjtkOiw7dDoiO4U6FDuWOgU7pzryOrg64TrHOtE61jrBOuM6rjrvOpo6+zqEOgY7bjoRO1k6GztFOiQ7MDosOx06NDsLOj07+TlEO+g5SjvYOVE7yTlXO7k5XDurOWE7nTmeOD06pDhNOqo4XTqwOGw6tjh7Or04iDrCOJQ6yDifOs44qTrUOLE62ji4OuA4vjrnOMI67jjGOvU4yTr9OMs6BjnOOg850DoZOdI6IznUOi451jo6Odg6RjnbOlM53TpiOeA6cjnkOoM56DqVOe06pznyOrs5+TrOOf864jkHO/Q5DzsFOhU7FjoZOyY6Gzs2Oho7RToYO1M6FDtiOg87cjoGO4I6+zqSOuw6oTrcOrE6yzq/Oro6zTqqOto6mDrmOoU68jpyOvw6XjoHO0o6EDs3Ohk7JTohOxI6KTsAOjE77zk4O985PzvQOUY7wTlMO7I5UTukOVY7ljmpODk6rzhIOrU4Vzq7OGU6wjhzOsg4fzrOOIs61DiWOto4nzrhOKc65ziuOu44szr0OLc6/Di7OgQ5vjoLOcA6FDnDOh45xTooOcY6MjnIOj05yTpJOcw6VjnOOmM50DpyOdM6gTnWOpE52TqiOd06sznhOsU55jrXOes66DnxOvk59joJOvs6GTr9Oig6/zo3Ov86RTr8OlM6+TphOvQ6cDrtOn864zqOOtU6nDrGOqs6tzq4Oqc6xjqWOtI6hTreOnM66TphOvQ6Tjr+Ojw6BzspOg87GDoXOwY6Hzv2OSc75TkuO9Y5NTvHOTs7uTlBO6s5RzudOUw7kDm0ODY6ujhDOsA4UTrGOF46zDhrOtI4dzrZOII63ziMOuY4lTrsOJ068zijOvo4qDoBOa06CDmwOhE5szoZObY6Ijm4Ois5uTo1Obs6QDm8Oks5vjpWOcA6ZDnBOnE5wzp/OcU6jTnHOp05yjqsOc06vDnQOs051DrdOdc67jnbOv053zoNOuI6GzrlOio65jo4OuU6RTrjOlI64DpgOtw6bTrVOnw6yzqKOr86lzqxOqU6ojqyOpM6vzqEOss6dDrWOmM64TpROus6QDr1Oi46/jodOgY7DDoOO/s5FjvrOR073DklO805Kzu+OTE7sDk3O6M5PTuVOUI7iDm/ODI6xDg+Oso4SzrQOFc61zhjOt04bjrjOHk66jiCOvE4izr4OJI6/ziYOgY5njoNOaI6FTmlOh05qDolOas6LjmtOjg5rjpBOa86TDmwOlc5sjpjObM6bzm1Onw5tjqKObc6mDm5Oqc5ujq2Ob06xTm/OtQ5wTrkOcQ68znHOgE6yjoQOsw6HjrOOis6zjo4Os06RTrLOlI6yDpeOsQ6azq9Onk6tDqGOqk6kzqbOp86jjqsOoA6uTpyOsQ6YzrPOlM62TpCOuM6MjrsOiE69ToQOv46ADoGO/A5DTvhORQ70jkbO8M5Iju1OSg7qDkuO5o5MzuNOTg7gDnJOC46zjg5OtQ4RDraOFA64ThbOuc4ZTrtOG869Dh5Ovs4gToCOYg6CTmOOhE5kzoYOZg6IDmbOig5njoxOaA6OjmhOkM5ozpNOaQ6VzmlOmI5pjpuOaY6ejmnOoc5qDqVOak6ojmqOrA5qzq+Oa06zDmuOts5sDrpObI69zm0OgU6tjoSOrc6Hzq4Oiw6uDo5Orc6RTq1OlE6sjpdOq06ajqnOnY6nzqDOpQ6jzqHOps6ejqnOm06sjpfOr06UjrIOkM60jo0Otw6JDrlOhQ67ToEOvY69Dn+OuU5BTvWOQw7yDkTO7o5GTusOR87nzklO5I5KjuFOS87eTnSOCk62DgzOt44PjrkOEk66jhTOvA4XTr3OGc6/jhvOgU5dzoMOX46FDmEOhs5iTojOY06KzmQOjI5kzo7OZU6RDmWOk45lzpYOZg6YjmZOm05mTp5OZo6hTmbOpE5mzqeOZw6qzmcOrg5nTrGOZ460zmeOuA5oDruOaE6+zmhOgg6ojoVOqM6ITqjOi06ojo5OqE6RTqfOlA6nDpcOpg6aDqSOnQ6ijqAOoA6izp1OpY6aDqiOlw6rTpOOrc6QTrCOjM6zDokOtU6FTreOgY65jr2Oe466Dn2Otk5/TrLOQQ7vTkLO7A5ETuiORc7ljkcO4k5ITt8OSY7cDnbOCM64TgtOuY4NzrtOEI68zhLOvk4VDoAOV46BzlmOg45bToVOXQ6HTl6OiU5fjosOYI6NDmFOj05iDpFOYo6TzmLOlg5jDpiOYw6bDmMOnc5jTqDOY06jzmOOps5jjqnOY46szmOOr85jjrMOY462TmPOuU5jzryOY86/jmQOgs6kDoXOpA6IzqPOi46jzo6Oo06RTqKOlA6hzpbOoM6Zjp+OnI6djp9Om06iDpjOpM6VzqeOko6qDo+OrI6MTq8OiM6xjoVOs86BzrXOvg54DrqOec62znvOs059jrAOf06szkDO6Y5CTuZOQ87jTkUO4A5GTt0OR47aTnkOB066TgnOu84MTr1ODo6+zhEOgI5TDoJOVQ6EDlcOhc5YzoeOWo6JjlvOi45dDo2OXc6Pjl6OkY5fTpPOX46WDmAOmI5gDpsOYA6djmBOoA5gTqMOYE6lzmBOqM5gTquOYA6ujmAOsY5fzrSOX863jl/Ouo5fzr2OX86Ajp+Og46fjoZOn06JTp8OjA6ezo7Onk6RTp3OlA6dDpbOnA6ZTpqOnA6Yzp7Ols6hjpROpA6RTqaOjo6pDotOq46IDq3OhM6wDoGOsk6+DnROuo52TrcOeE6zznoOsE57zq1OfY6qDn8Opw5AjuQOQc7hDkMO3g5ETttORY7YjnsOBg68jghOvc4Kjr9ODM6BDk8Ogo5RDoROUw6GDlTOh85WjonOWA6LjlkOjY5aTo+OWw6RzlvOk85cTpYOXM6YTl0Oms5dDp1OXQ6fzl1Ook5dTqUOXQ6nzl0Oqo5czq1OXM6wTlyOsw5cTrXOXA64jlwOu45bzr6OW86BTpuOhA6bTobOmw6JjprOjE6aTo7Omc6RjpkOlA6YTpaOl06ZDpYOm86UTp5Okk6gzpAOo06NTqXOio6oToeOqo6EjqzOgU6vDr5OcQ67DnMOt451DrROds6xDniOrg56TqrOe86nzn1OpM5+zqHOQA7fDkFO3A5CjtmOQ87Wzn0OBI6+jgaOv84IzoFOSw6Czk0OhI5OzoZOUM6IDlJOic5UDovOVU6NzlaOj45XjpHOWE6TzlkOlg5ZTphOWc6ajloOnM5aDp9OWk6hzlpOpE5aDqbOWg6pjlnOrE5Zjq8OWU6xzlkOtE5YzrcOWE65zlhOvI5YDr9OV86CDpeOhI6XDodOls6JzpaOjI6WDo8OlU6RjpSOlA6TzpaOks6ZDpGOm46Pzp4Ojg6gTovOos6JTqUOho6njoPOqc6AzqvOvg5uDrsOcA63znIOtM5zzrGOdY6ujndOq454zqiOek6ljnvOoo59Tp/Ofo6dDn/Omk5BDtfOQg7VTn8OAs6ATkUOgc5HDoNOSQ6EzkrOho5MzogOTk6JzlAOi85RTo2OUs6PjlPOkY5UzpPOVY6VzlYOl85WjpoOVs6cjlcOns5XTqEOV06jjlcOpg5XDqiOVs6rTlaOrc5WTrCOVg6zDlWOtY5VTrhOVM66zlSOvY5UToAOk86CjpOOhQ6TDofOks6KTpJOjM6Rzo9OkQ6RjpBOlA6PjpZOjo6Yzo0Om06Ljp2Oic6fzofOok6FTqSOgs6mzoAOqM69TmsOuo5tDrfObw60znEOsc5yzq7OdI6rznYOqQ53jqYOeQ6jTnqOoI57zp3OfQ6bTn5OmI5/TpYOQI7TzkDOQU6CDkNOg45FToUORw6GjkkOiE5KjonOTA6Lzk2OjY5PDo9OUA6RTlEOk45SDpWOUs6XjlNOmc5TjpwOVA6eTlROoI5UTqMOVE6lTlQOp85UDqpOU86szlOOr05TDrHOUs60TlJOts5RzrlOUU67zlEOvk5QjoDOkA6DTo/Ohc6PTogOjs6Kjo5OjQ6Nzo9OjQ6RjoxOlA6LTpZOik6YjokOmw6Hjp1Ohc6fjoOOoc6BTqPOvw5mDryOaA65zmpOt05sTrSObg6xznAOrw5xzqwOc06pTnUOpo52jqPOd86hDnlOno56jpwOe46ZTnzOlw5+DpSOfw6STkKOf85DzkHOhQ5DjoaORU6ITkbOic5ITouOSc6NTktOj05MjpEOTY6TDk6OlQ5PTpdOT86ZTlBOm45Qzp3OUQ6gDlEOok5RTqSOUU6nDlEOqU5QzqvOUI6uTlBOsM5PzrMOT061jk7OuA5OTrpOTc68zk1Ovw5MzoGOjE6DzowOhk6LjoiOiw6KzoqOjU6KDo+OiU6RzohOlA6HTpZOhk6YjoUOms6Djp0Ogc6fDr/OYU69jmNOu05ljrkOZ462jmmOs85rjrFObU6uzm8OrA5wzqlOck6mznQOpA51TqGOds6fDngOnI55TpoOek6XjnuOlU58jpMOfY6QzkQOfk5FTkAOhs5BjogOQ06JzkTOi05GTo0OR46OzkjOkM5KDpLOSw6UzkvOls5MjpjOTQ6bDk2OnQ5Nzp9OTg6hjk5Oo85OTqYOTk6ojk4Oqs5Nzq1OTY6vjk0Osg5MjrROTA62zkuOuQ5KzrtOSk69jknOv85JToIOiM6ETohOhs6HzokOh06LTobOjU6GDo+OhU6RzoSOlA6DjpZOgk6YjoEOmo6/jlyOvg5ezrwOYM65zmLOt85lDrVOZs6zDmjOsI5qzq5ObI6rzm5OqU5vzqaOcY6kTnMOoc50Tp9Odc6czncOmo54DphOeU6WDnpOk857TpGOfE6PjkWOfI5Gzn5OSA5/zkmOQU6LDkLOjM5EDo6ORU6QTkZOkk5HTpROSE6WTkkOmE5JzppOSk6cTkrOno5LDqDOS06jDktOpU5LTqeOSw6pzkrOrE5Kjq6OSk6wzknOsw5JTrWOSM63zkgOug5HjrwORs6+TkZOgI6FzoLOhU6FDoTOhw6ETolOg86LjoNOjY6Cjo/Ogc6SDoDOlA6/zlZOvs5YTr1OWk67zlyOuk5ejrhOYI62TmKOtA5kjrIOZk6vzmhOrY5qDqsOa86ozm2Opk5vDqQOcM6hjnIOn05zjp0OdM6aznYOmI53DpZOeE6UTnlOkk56TpBOew6OTkbOew5IDnyOSU5+DkrOf45MjkDOjg5BzpAOQw6RzkQOk45EzpWORc6XjkZOmY5HDpvOR46dzkfOoA5IDqJOSE6kTkhOpo5ITqkOSA6rTkfOrY5HTq/ORw6yDkaOtE5GDraORU64jkTOus5EDr0OQ06/DkLOgU6CToNOgc6FjoFOh46AzonOgA6Lzr+OTc6+zlAOvg5SDr1OVE68DlZOuw5YTrnOWk64TlxOto5eTrTOYE6yzmIOsM5kDq6OZc6sjmfOqk5pjqgOa06lzmzOo45ujqFOb86fDnFOnM5yjprOdA6YjnUOlo52TpSOd06SjnhOkM55Do7Oeg6NDkgOeY5JTnsOSo58TkwOfY5Njn6OT05/zlFOQI6TDkGOlQ5CTpbOQw6ZDkPOmw5ETp0ORI6fTkTOoU5FDqOORQ6lzkUOqA5FDqoORM6sTkSOro5ETrDOQ86zDkNOtU5CzrdOQg65jkFOu45Ajr3OQA6/zn9OQc6+zkQOvk5GDr3OSA69TkoOvI5MDrwOTg67TlBOuo5STrmOVE64jlZOt05YTrYOWg60jlwOsw5eDrFOX86vTmHOrU5jjqtOZY6pTmdOpw5pDqUOao6izmxOoM5tzp7Ob06cjnCOmo5yDpiOc06WjnROlI51jpLOdo6RDndOj054To2OeQ6LzkkOeE5KTnmOS456jk0Oe45OznyOUI59jlJOfk5UTn8OVk5/zlgOQE6aDkEOnE5BTp5OQc6gjkHOoo5CDqTOQg6mzkIOqQ5CDqtOQc6tjkGOr85BDrHOQI60DkAOtg5/TnhOfs56Tn4OfI59Tn6OfI5AjrwOQo67jkSOus5GjrpOSI65zkqOuQ5MjriOTk63zlBOtw5STrYOVE60zlZOs45YDrJOWg6xDlvOr05dzq3OX46rzmFOqg5jTqgOZQ6mDmbOpA5ojqIOag6gDmvOng5tTpwObo6aDnAOmA5xTpZOco6UjnOOks50zpEOdc6PTnaOjc53ToxOeA6KzkoOdw5LDnfOTE54zk4Oec5PznqOUY57TlOOfA5VTnyOV059TllOfc5bTn4OXU5+jl+Ofs5hjn8OY85/DmXOfw5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\")","export enum RenderType {\n Background = 1,\n Shadow = 2,\n Glasses = 4,\n All = 7\n}\n","import faceTriData from '../assets/face_tri_shorts.bin';\nimport headUVData from '../assets/head-6.uvdata';\nimport { GlRenderOptions } from '../objects/GlRenderOptions';\nimport { DefaultGlRenderDebugOptions } from './DefaultGlRenderDebugOptions';\n\n// tslint:disable-next-line: variable-name\nexport const DefaultGlRenderOptions: Required = {\n mirror: false,\n debugOptions: DefaultGlRenderDebugOptions,\n faceTri: faceTriData,\n headUV: headUVData,\n \n measurementsCallback: () => { return; },\n loadingCallbacks: {\n onStart: () => { return; },\n onFinish: () => { return; },\n onError: () => { return; },\n }\n};","export const FittingOffset = {\n ksGlassesOffsetZ: 5.0,\n ksGlassesOffsetY: 6.0\n};\n","import { mat4, vec3 } from 'gl-matrix';\n\nexport interface RenderCanvasParameters {\n canvasWidth: number;\n canvasHeight: number;\n}\n\nexport default class RenderDataUtils {\n\n public static noseVtxRoot = 2100;\n public static noseVtxTip = 2111;\n public static earVtx = 10810;\n\n public static parseHeadUVData(arraybuf: ArrayBuffer): Float32Array {\n // the contents of the headUVdata are an integer32 with the number of\n // vertices and then float16 data\n\n // the number of uv coordinates is different than the number of\n // points when using head-6.uvdata (24742 vs 24409 pts). Since we are\n // skipping loading the head-6.data file, we crop the headData.uv\n // matrix here.\n const headUVCount = new Int32Array(arraybuf, 0, 1); // should be 24742\n const headUV16f = new Uint16Array(arraybuf, 4);\n // check size is right\n if (2 * headUVCount[0] !== headUV16f.length) {\n throw new Error('head uv data count doesn\\'t match actual data count');\n }\n if (headUV16f.length < (2 * 24409)) {\n throw new Error('too few vertices');\n }\n\n const croppedHeadUVCount = 24409;\n const headUVs = new Float32Array(croppedHeadUVCount * 2);\n for (let k = 0; k < 2 * croppedHeadUVCount; k++) {\n headUVs[k] = this.float16_to_float(headUV16f[k]);\n }\n return headUVs;\n }\n\n public static addHomogenousCoordinate(\n shape: Float32Array): Float32Array {\n const vertexCount = shape.length / 3;\n const shapexyzw = new Float32Array(vertexCount * 4);\n for (let i = 0; i < vertexCount; i++) {\n shapexyzw[i * 4] = shape[i * 3];\n shapexyzw[i * 4 + 1] = shape[i * 3 + 1];\n shapexyzw[i * 4 + 2] = shape[i * 3 + 2];\n shapexyzw[i * 4 + 3] = 1.0;\n }\n return shapexyzw;\n }\n\n // traverse the whole triangulation, and for each vertex\n // make a list of other vertices it shares a triangle with\n public static findPointNeighbours(\n nPoints: number,\n triangulation: Uint16Array\n ): number[][] {\n const pointNeighbours = new Array(nPoints);\n for (let p = 0; p < nPoints; p++) {\n pointNeighbours[p] = [];\n }\n\n const triangleCount = Math.floor(triangulation.length / 3);\n\n for (let t = 0; t < triangleCount; t++) {\n const vertex0 = triangulation[3 * t];\n const vertex1 = triangulation[3 * t + 1];\n const vertex2 = triangulation[3 * t + 2];\n pointNeighbours[vertex0].push(vertex1, vertex2);\n pointNeighbours[vertex1].push(vertex2, vertex0);\n pointNeighbours[vertex2].push(vertex0, vertex1);\n }\n\n return pointNeighbours;\n }\n\n public static diffuseDeformationRange(\n shape: Float32Array,\n deformation: number[],\n indices: number[][],\n pointNeighbours: number[][],\n range: number,\n ): Float32Array {\n const weights = new Float32Array(range);\n for (let k = 0; k < range; k++) {\n weights[k] = Math.exp(-0.5 * k * k / (range * range / 9.0));\n }\n\n const shapeLength = shape.length / 3;\n\n const passes = indices.length;\n const dX = new Float32Array(shape.length);\n const dN = new Float32Array(shape.length);\n const dI = new Int32Array(shape.length);\n\n const perFrameShape = new Float32Array(shape);\n\n for (let p = 0; p < passes; p++) {\n dX.fill(0);\n dN.fill(0);\n dI.fill(-1);\n for (let i = 0; i < indices[p].length; i++) {\n RenderDataUtils.diffuse(indices[p][i], 0, i,\n {\n x: deformation[p][3 * i],\n y: deformation[p][3 * i + 1],\n z: deformation[p][3 * i + 2]\n },\n pointNeighbours, weights, dX, dN, dI);\n }\n\n // add computed deformations to current shape\n for (let k = 0; k < shapeLength; k++) {\n if (dN[k] > 0.0) {\n perFrameShape[3 * k] += dX[3 * k] / dN[k];\n perFrameShape[3 * k + 1] += dX[3 * k + 1] / dN[k];\n perFrameShape[3 * k + 2] += dX[3 * k + 2] / dN[k];\n }\n }\n }\n return perFrameShape;\n }\n\n public static calculateGlassesTransforms(\n shape: Float32Array,\n transformCount = 1,\n ksGlassesOffsetY: number,\n ksGlassesOffsetZ: number,\n ): mat4[] {\n const noseVtx1 = this.noseVtxRoot;\n const noseVtx2 = this.noseVtxTip;\n const eartx = this.earVtx;\n const maxGlassesPoses = 21;\n\n // if (!transformCount) transformCount = 1;\n transformCount = Math.max(Math.min(transformCount, maxGlassesPoses), 1);\n\n // basic rotation to apply on glasses\n const rotMat = this.glassesDefaultRotation();\n\n const noseRoot = vec3.fromValues(shape[3 * noseVtx1], shape[3 * noseVtx1 + 1],\n shape[3 * noseVtx1 + 2]);\n const noseTip = vec3.fromValues(shape[3 * noseVtx2], shape[3 * noseVtx2 + 1],\n shape[3 * noseVtx2 + 2]);\n const earP = vec3.fromValues(shape[3 * eartx], shape[3 * eartx + 1],\n shape[3 * eartx + 2]);\n\n const transformations = new Array(transformCount);\n for (let k = 0; k < transformCount; k++) {\n let d = 0.9 * k / transformCount;\n // HACK! this is for the kiosk only for now\n if (transformCount !== 1) {\n // TODO verify the logic behind this, WARNING this can reverb on asset production\n d = k / transformCount - 0.15;\n }\n const position = vec3.create();\n vec3.lerp(position, noseRoot, noseTip, d);\n\n const thetaRotMat = this.getRotationMatrixForGlasses(position, earP, noseRoot);\n\n const glassesMat = mat4.create();\n mat4.multiply(glassesMat, rotMat, thetaRotMat);\n glassesMat[12] = position[0];\n glassesMat[13] = position[1] + ksGlassesOffsetY;\n glassesMat[14] = position[2] + ksGlassesOffsetZ;\n transformations[k] = glassesMat;\n }\n return transformations;\n }\n\n public static glassesDefaultRotation(): mat4 {\n const pose = vec3.fromValues(174.621 * Math.PI / 180.0, 0, 0);\n const length = vec3.length(pose);\n const rotMat = mat4.create();\n mat4.fromRotation(rotMat, length, pose);\n return rotMat;\n }\n\n public static getRotationMatrixForGlasses(position: vec3, earPosition: vec3, noseRoot: vec3): mat4 {\n // NOTE: we noticed that the second x parameter of atan2 is always related to the noseRoot.\n // We debated if as second parameter would be more correct to use earPosition[2] - position[2].\n // We decided to leave it this way to avoid unexpected repercussions to the fitting logics.\n\n const theta = Math.atan2(position[1] - earPosition[1], earPosition[2] - noseRoot[2]);\n\n const thetaRot = vec3.fromValues(theta, 0.0, 0.0);\n length = vec3.length(thetaRot);\n const thetaRotMat = mat4.create();\n mat4.fromRotation(thetaRotMat, length, thetaRot);\n return thetaRotMat;\n }\n\n private static float16_to_float(h: any) {\n const s = (h & 0x8000) >> 15;\n const e = (h & 0x7C00) >> 10;\n const f = h & 0x03FF;\n\n if (e === 0) {\n return (s ? -1 : 1) * Math.pow(2, -14) * (f / Math.pow(2, 10));\n } else if (e === 0x1F) {\n return f ? NaN : ((s ? -1 : 1) * Infinity);\n }\n\n return (s ? -1 : 1) * Math.pow(2, e - 15) * (1 + (f / Math.pow(2, 10)));\n }\n\n private static diffuse(\n i: number,\n d: number,\n label: number,\n deformation: any,\n neighbours: number[][],\n weights: Float32Array,\n value: Float32Array,\n accumulatedWeight: Float32Array,\n sourceLabel: Int32Array,\n ): void {\n if (d >= weights.length) { return; }\n if (sourceLabel[i] === label) { return; }\n value[3 * i] += deformation.x * weights[d];\n value[3 * i + 1] += deformation.y * weights[d];\n value[3 * i + 2] += deformation.z * weights[d];\n\n accumulatedWeight[i] += weights[d];\n sourceLabel[i] = label;\n\n // tslint:disable-next-line:prefer-for-of\n for (let k = 0; k < neighbours[i].length; k++) {\n RenderDataUtils.diffuse(neighbours[i][k], d + 1, label, deformation,\n neighbours, weights, value, accumulatedWeight,\n sourceLabel);\n }\n }\n\n}\n","import {mat4, quat, vec3} from 'gl-matrix';\nimport { FittingOffset } from './constants/FittingOffset';\nimport RenderDataUtils from './RenderDataUtils';\n\nexport class FastFittingMode {\n protected headShape: Float32Array;\n protected referenceGlassesPoses: mat4[];\n\n constructor(shape: Float32Array, referenceGlassesPoses: mat4[]) {\n this.headShape = shape;\n this.referenceGlassesPoses = referenceGlassesPoses;\n }\n\n public getHeadVertexAtIndex(index: number): vec3 {\n return vec3.fromValues(this.headShape[3 * index], this.headShape[3 * index + 1], this.headShape[3 * index + 2]);\n }\n\n public getAngleAxis(poseMat) {\n const quaternion = quat.create();\n const axisAngle = vec3.create();\n mat4.getRotation(quaternion, poseMat);\n const angle = quat.getAxisAngle(axisAngle, quaternion);\n\n vec3.scale(axisAngle, axisAngle, angle);\n return axisAngle;\n }\n\n private poseVec6ToMat4(glassesPose: Float32Array): mat4 {\n const glassesPoseMat = mat4.create();\n\n const glassRot = vec3.fromValues(glassesPose[0], glassesPose[1], glassesPose[2]);\n const length = vec3.length(glassRot);\n mat4.fromRotation(glassesPoseMat, length, glassRot);\n\n glassesPoseMat[12] = glassesPose[3];\n glassesPoseMat[13] = glassesPose[4];\n glassesPoseMat[14] = glassesPose[5];\n return glassesPoseMat;\n }\n\n // TODO maybe a better naming is required, returns the glasses after all the offset,\n // the real glasses world position is calculated after multiplication of this matrix for head mvp\n public getGlassesWorldPosition() {\n const pose = this.calculateMeshSpecificPoses();\n const glassesPose = new Float32Array(pose[0].buffer, 0);\n return this.poseVec6ToMat4(glassesPose);\n }\n\n public getHeadMatrices(headPose: number[], scalingFactor = 1): {mvp: mat4, world: mat4} {\n const headPoseMat = this.getHeadWorldMatrix(headPose, scalingFactor);\n const headMVPMat = mat4.create();\n mat4.mul(headMVPMat, mat4.create(), headPoseMat);\n\n return {\n mvp: headMVPMat,\n world: headPoseMat,\n };\n }\n\n public getHeadWorldMatrix(headPose: number[], scalingFactor = 1): mat4 {\n // const headPose = Float32Array.from(headPoses.getHeadPose(frameno));\n const scaleMat = mat4.create();\n const headPoseMat = mat4.create();\n\n mat4.scale(scaleMat, scaleMat, [1.0, 1.0, -1.0]);\n\n const headRot = vec3.fromValues(headPose[0], headPose[1], headPose[2]);\n const length = vec3.length(headRot);\n mat4.rotate(headPoseMat, headPoseMat, length, headRot);\n headPoseMat[12] = headPose[3] * scalingFactor;\n headPoseMat[13] = headPose[4] * scalingFactor;\n headPoseMat[14] = headPose[5] * scalingFactor;\n mat4.mul(headPoseMat, scaleMat, headPoseMat);\n\n return headPoseMat;\n }\n\n public getGlassesMatrices(\n headPose: number[],\n offsetY: number,\n offsetZ: number,\n scalingFactor = 1,\n ): { mvp: mat4, world: mat4 } {\n\n const appliedOffset = [0, offsetY, offsetZ];\n\n const glassesPoseMat = this.getGlassesWorldPosition();\n\n glassesPoseMat[12] = (glassesPoseMat[12] + appliedOffset[0]) * scalingFactor;\n glassesPoseMat[13] = (glassesPoseMat[13] + appliedOffset[1]) * scalingFactor;\n glassesPoseMat[14] = (glassesPoseMat[14] + appliedOffset[2]) * scalingFactor;\n\n // compose with the rotation for this particular configuration\n mat4.rotate(glassesPoseMat, glassesPoseMat, 0 , [1.0, 0.0, 0.0]);\n const headMatrices = this.getHeadMatrices(headPose, scalingFactor);\n\n const glassesWorld = mat4.create();\n mat4.mul(glassesWorld, headMatrices.world, glassesPoseMat);\n\n /* const invertY = mat4.create();\n mat4.mul(glassesWorld, glassesWorld, mat4.fromScaling(invertY, [1, -1, 1])); */\n\n const glassesMVPMat = mat4.create();\n mat4.mul(glassesMVPMat, headMatrices.mvp, glassesPoseMat);\n\n return {\n mvp: glassesMVPMat,\n world: glassesWorld,\n };\n }\n\n public calculateMeshSpecificPoses(): Float32Array[] {\n\n const zerosVec3Array = [];\n for (let i = 0; i < this.referenceGlassesPoses.length; i++) {\n zerosVec3Array.push(vec3.fromValues(0, 0, 0));\n }\n\n // create Float32Array empty array and return that\n\n const posesTowardFace = new Array(zerosVec3Array.length);\n\n for (let k = 0; k < this.referenceGlassesPoses.length; k++) {\n const mat = this.referenceGlassesPoses[k];\n const angleAxis = this.getAngleAxis(mat);\n const pose = new Float32Array(6);\n pose[0] = angleAxis[0];\n pose[1] = angleAxis[1];\n pose[2] = angleAxis[2];\n pose[3] = mat[12];\n pose[4] = mat[13];\n pose[5] = mat[14];\n posesTowardFace[k] = pose;\n }\n\n const pushedMatrix: mat4[] = [];\n posesTowardFace.forEach((gPose) => {\n pushedMatrix.push(this.poseVec6ToMat4(gPose));\n });\n\n const posesTowardNose = new Array(zerosVec3Array.length);\n\n for (let k = 0; k < pushedMatrix.length; k++) {\n const mat = pushedMatrix[k];\n const angleAxis = this.getAngleAxis(mat);\n const pose = new Float32Array(6);\n pose[0] = angleAxis[0];\n pose[1] = angleAxis[1];\n pose[2] = angleAxis[2];\n pose[3] = mat[12];\n pose[4] = mat[13];\n pose[5] = mat[14];\n posesTowardNose[k] = pose;\n }\n\n const basicRotation = RenderDataUtils.glassesDefaultRotation();\n\n const earPosition = vec3.fromValues(\n this.headShape[3 * RenderDataUtils.earVtx],\n this.headShape[3 * RenderDataUtils.earVtx + 1],\n this.headShape[3 * RenderDataUtils.earVtx + 2]);\n\n const noseRoot = vec3.fromValues(this.headShape[3 * RenderDataUtils.noseVtxRoot],\n this.headShape[3 * RenderDataUtils.noseVtxRoot + 1],\n this.headShape[3 * RenderDataUtils.noseVtxRoot + 2]);\n\n // transform matrix to [roll, yaw, pitch, x, y, z]\n const alignedPoses = posesTowardNose.map((pose) => {\n const position = vec3.fromValues(\n pose[3],\n pose[4] - FittingOffset.ksGlassesOffsetY,\n pose[5] - FittingOffset.ksGlassesOffsetY);\n const newRotationMatrix = RenderDataUtils.getRotationMatrixForGlasses(position, earPosition, noseRoot);\n const glassesMat = mat4.create();\n mat4.multiply(glassesMat, basicRotation, newRotationMatrix);\n const angleAxis = this.getAngleAxis(glassesMat);\n pose[0] = angleAxis[0];\n pose[1] = angleAxis[1];\n pose[2] = angleAxis[2];\n\n return pose;\n });\n // sort poses by y\n alignedPoses.sort((a, b) => {\n return a[4] - b[4];\n });\n\n return alignedPoses;\n }\n\n\n\n public calculateFastFittingOrigin(scalingFactor: number, offsetY: number, offsetZ: number): vec3 {\n // y component of a couple of nose vertices in local space\n const noseVtx1 = 2097;\n const noseVtx2 = 2104;\n\n const lower = this.getHeadVertexAtIndex(noseVtx2);\n const upper = this.getHeadVertexAtIndex(noseVtx1);\n\n const xOffset = (lower[0] + upper[0]) / 2.0;\n const yOffset = (lower[1]) + offsetY;\n const zOffset = (upper[2]) + offsetZ;\n return vec3.fromValues(xOffset * scalingFactor, yOffset * scalingFactor, zOffset * scalingFactor);\n }\n\n public setShape(shape: Float32Array) {\n this.headShape = shape;\n }\n\n}\n","const float16_to_float = (h: any) => {\n const s = (h & 0x8000) >> 15;\n const e = (h & 0x7C00) >> 10;\n const f = h & 0x03FF;\n\n if (e === 0) {\n return (s ? -1 : 1) * Math.pow(2, -14) * (f / Math.pow(2, 10));\n } else if (e === 0x1F) {\n return f ? NaN : ((s ? -1 : 1) * Infinity);\n }\n\n return (s ? -1 : 1) * Math.pow(2, e - 15) * (1 + (f / Math.pow(2, 10)));\n};\n\nconst MILLIMETERS2METERS_SCALINGFACTOR = 0.001;\n\nexport {\n float16_to_float,\n MILLIMETERS2METERS_SCALINGFACTOR\n};","interface Lines {\n [key: string]: HTMLElement;\n}\n\nclass Inspector {\n private static inspectorLayer: HTMLDivElement;\n\n private static lines: Map = new Map();\n\n private static isOpen = false;\n\n private static createLayer() {\n const inspectorLayerId = 'vm-renderer-debug-layer';\n this.inspectorLayer = document.createElement('div');\n this.inspectorLayer.id = inspectorLayerId;\n this.inspectorLayer.style.position = 'absolute';\n this.inspectorLayer.style.bottom = '0';\n this.inspectorLayer.style.left = 'calc(-100% + 30px)';\n this.inspectorLayer.style.backgroundColor = 'white';\n this.inspectorLayer.style.width = '100%';\n this.inspectorLayer.style.height = 'auto';\n this.inspectorLayer.style.maxWidth = '100%';\n this.inspectorLayer.style.padding = '1em';\n this.inspectorLayer.style.paddingLeft = '30px';\n this.inspectorLayer.style.overflowWrap = 'anywhere';\n this.inspectorLayer.innerText = 'renderer-inspector';\n\n const openClose = document.createElement('div');\n this.inspectorLayer.appendChild(openClose);\n openClose.style.float = 'right';\n openClose.style.width = '25px';\n openClose.style.height = '100%';\n openClose.style.display = 'block';\n openClose.style.textAlign = 'center';\n openClose.style.marginLeft = '0';\n openClose.style.marginRight = '-30px';\n openClose.style.backgroundColor = '#AF0';\n openClose.style.fontFamily = 'monospace';\n openClose.style.borderRadius = '12px';\n openClose.style.textAlign = 'center';\n openClose.style.cursor = 'pointer';\n openClose.style.boxShadow = '2px 2px';\n openClose.innerText = 'I';\n\n openClose.onclick = () => {\n if (this.isOpen) {\n this.inspectorLayer.style.left = 'calc(-100% + 30px)';\n openClose.style.float = 'right';\n openClose.style.marginRight = '-30px';\n openClose.style.marginLeft = '0';\n } else {\n openClose.style.float = 'left';\n openClose.style.marginRight = '0';\n openClose.style.marginLeft = '-30px';\n this.inspectorLayer.style.left = '0';\n }\n this.isOpen = !this.isOpen;\n };\n\n document.body.appendChild(this.inspectorLayer);\n }\n\n public static addLine(message: any, id: string) {\n if (!this.inspectorLayer) {\n this.createLayer();\n }\n\n let newLine = this.lines[id];\n if (!newLine) {\n newLine = document.createElement('p');\n newLine.id = id;\n this.lines[id] = newLine;\n this.inspectorLayer.appendChild(newLine);\n }\n newLine.innerHTML = `${id}: ${JSON.stringify(message)}`;\n }\n\n public static destroy() {\n if (this.inspectorLayer !== undefined) {\n this.inspectorLayer.remove();\n this.inspectorLayer = undefined;\n }\n this.isOpen = true;\n this.lines = new Map();\n }\n}\n\nexport { Inspector };\n","const bygozomaticBreadthIdsRaw = [\n 3936,\n 296,\n 4001,\n 231,\n 4066,\n 166,\n 3935,\n 295,\n 4000,\n 230,\n 4065,\n 165,\n 3804,\n 424,\n 3869,\n 359,\n 3934,\n 294,\n 3999,\n 229,\n 4064,\n 164,\n 3803,\n 423,\n 3868,\n 358,\n 3933,\n 293,\n 3998,\n 228,\n 4063,\n 163,\n 3802,\n 422,\n 3867,\n 357,\n 3932,\n 292,\n 3997,\n 227,\n 4062,\n 162,\n 4127,\n 65,\n 3801,\n 421,\n 3866,\n 356,\n 3931,\n 291,\n 3996,\n 226,\n 4061,\n 161,\n 4126,\n 63,\n 3800,\n 420,\n 3865,\n 355,\n 3930,\n 290,\n 3995,\n 225,\n 4060,\n 160,\n 4125,\n 61,\n 3799,\n 419,\n 3864,\n 354,\n 3929,\n 289,\n 3994,\n 224,\n 4059,\n 159,\n 4124,\n 59,\n 3733,\n 483,\n 3798,\n 418,\n 3863,\n 353,\n 3928,\n 288,\n 3993,\n 223,\n 4058,\n 158,\n 4123,\n 57,\n 3732,\n 482,\n 3797,\n 417,\n 3862,\n 352,\n 3927,\n 287,\n 3992,\n 222,\n 4057,\n 157,\n 3796,\n 416,\n 3861,\n 351,\n 3926,\n 286,\n];\n\nconst bygozomaticBreadthIds: number[][] = [];\n\nfor (let i = 0; i < bygozomaticBreadthIdsRaw.length; i = i + 2) {\n bygozomaticBreadthIds.push([bygozomaticBreadthIdsRaw[i], bygozomaticBreadthIdsRaw[i + 1]]);\n}\n\nexport { bygozomaticBreadthIds };\n","const headBreadthIDsRaw = [\n 14644,\n 10419,\n 14709,\n 10354,\n 14774,\n 10289,\n 14839,\n 10224,\n 14904,\n 10159,\n 14969,\n 10094,\n 15034,\n 10029,\n 15099,\n 9964,\n 15164,\n 9899,\n 15229,\n 9834,\n 15294,\n 9769,\n 15359,\n 9704,\n 15424,\n 9639,\n 15489,\n 9574,\n 14253,\n 10808,\n 14318,\n 10743,\n 14383,\n 10678,\n 14448,\n 10613,\n 14513,\n 10548,\n 14578,\n 10483,\n 14643,\n 10418,\n 14708,\n 10353,\n 14773,\n 10288,\n 14838,\n 10223,\n 14903,\n 10158,\n 14968,\n 10093,\n 15033,\n 10028,\n 15098,\n 9963,\n 15163,\n 9898,\n 15228,\n 9833,\n 15293,\n 9768,\n 15358,\n 9703,\n 15423,\n 9638,\n 15488,\n 9573,\n 14057,\n 11002,\n 14122,\n 10937,\n 14187,\n 10872,\n 14252,\n 10807,\n 14317,\n 10742,\n 14382,\n 10677,\n 14447,\n 10612,\n 14512,\n 10547,\n 14577,\n 10482,\n 14642,\n 10417,\n 14707,\n 10352,\n 14772,\n 10287,\n 14837,\n 10222,\n 14902,\n 10157,\n 14967,\n 10092,\n 15032,\n 10027,\n 15097,\n 9962,\n 15162,\n 9897,\n 15227,\n 9832,\n 15292,\n 9767,\n 15357,\n 9702,\n 15422,\n 9637,\n 15487,\n 9572,\n 13861,\n 11196,\n 13926,\n 11131,\n 13991,\n 11066,\n 14056,\n 11001,\n 14121,\n 10936,\n 14186,\n 10871,\n 14251,\n 10806,\n 14316,\n 10741,\n 14381,\n 10676,\n 14446,\n 10611,\n 14511,\n 10546,\n 14576,\n 10481,\n 14641,\n 10416,\n 14706,\n 10351,\n 14771,\n 10286,\n 14836,\n 10221,\n 14901,\n 10156,\n 14966,\n 10091,\n 15031,\n 10026,\n 15096,\n 9961,\n 15161,\n 9896,\n 15226,\n 9831,\n 15291,\n 9766,\n 15356,\n 9701,\n 15421,\n 9636,\n 15486,\n 9571,\n 13795,\n 11260,\n 13860,\n 11195,\n 13925,\n 11130,\n 13990,\n 11065,\n 14055,\n 11000,\n 14120,\n 10935,\n 14185,\n 10870,\n 14250,\n 10805,\n 14315,\n 10740,\n 14380,\n 10675,\n 14445,\n 10610,\n 14510,\n 10545,\n 14575,\n 10480,\n 14640,\n 10415,\n 14705,\n 10350,\n 14770,\n 10285,\n 14835,\n 10220,\n 14900,\n 10155,\n 14965,\n 10090,\n 15030,\n 10025,\n 15095,\n 9960,\n 15160,\n 9895,\n 15225,\n 9830,\n 15290,\n 9765,\n 15355,\n 9700,\n 15420,\n 9635,\n 15485,\n 9570,\n 13794,\n 11259,\n 13859,\n 11194,\n 13924,\n 11129,\n 13989,\n 11064,\n 14054,\n 10999,\n 14119,\n 10934,\n 14184,\n 10869,\n 14249,\n 10804,\n 14314,\n 10739,\n 14379,\n 10674,\n 14444,\n 10609,\n 14509,\n 10544,\n 14574,\n 10479,\n 14639,\n 10414,\n 14704,\n 10349,\n 14769,\n 10284,\n 14834,\n 10219,\n 14899,\n 10154,\n 14964,\n 10089,\n 15029,\n 10024,\n 15094,\n 9959,\n 15159,\n 9894,\n 15224,\n 9829,\n 15289,\n 9764,\n 15354,\n 9699,\n 15419,\n 9634,\n 15484,\n 9569,\n 13858,\n 11193,\n 13923,\n 11128,\n 13988,\n 11063,\n 14053,\n 10998,\n 14118,\n 10933,\n 14183,\n 10868,\n 14248,\n 10803,\n 14313,\n 10738,\n 14378,\n 10673,\n 14443,\n 10608,\n 14508,\n 10543,\n 14573,\n 10478,\n 14638,\n 10413,\n 14703,\n 10348,\n 14768,\n 10283,\n 14833,\n 10218,\n 14898,\n 10153,\n 14963,\n 10088,\n 15028,\n 10023,\n 15093,\n 9958,\n 15158,\n 9893,\n 15223,\n 9828,\n 15288,\n 9763,\n 15353,\n 9698,\n 15418,\n 9633,\n 15483,\n 9568,\n 13857,\n 11192,\n 13922,\n 11127,\n 13987,\n 11062,\n 14052,\n 10997,\n 14117,\n 10932,\n 14182,\n 10867,\n 14247,\n 10802,\n 14312,\n 10737,\n 14377,\n 10672,\n 14442,\n 10607,\n 14507,\n 10542,\n 14572,\n 10477,\n 14637,\n 10412,\n 14702,\n 10347,\n 14767,\n 10282,\n 14832,\n 10217,\n 14897,\n 10152,\n 14962,\n 10087,\n 15027,\n 10022,\n 15092,\n 9957,\n 15157,\n 9892,\n 15222,\n 9827,\n 15287,\n 9762,\n 15352,\n 9697,\n 15417,\n 9632,\n 15482,\n 9567,\n 13856,\n 11191,\n 13921,\n 11126,\n 13986,\n 11061,\n 14051,\n 10996,\n 14116,\n 10931,\n 14181,\n 10866,\n 14246,\n 10801,\n 14311,\n 10736,\n 14376,\n 10671,\n 14441,\n 10606,\n 14506,\n 10541,\n 14571,\n 10476,\n 14636,\n 10411,\n 14701,\n 10346,\n 14766,\n 10281,\n 14831,\n 10216,\n 14896,\n 10151,\n 14961,\n 10086,\n 15026,\n 10021,\n 15091,\n 9956,\n 15156,\n 9891,\n 15221,\n 9826,\n 15286,\n 9761,\n 15351,\n 9696,\n 15416,\n 9631,\n 15481,\n 9566,\n 13920,\n 11125,\n 13985,\n 11060,\n 14050,\n 10995,\n 14115,\n 10930,\n 14180,\n 10865,\n 14245,\n 10800,\n 14310,\n 10735,\n 14375,\n 10670,\n 14440,\n 10605,\n 14505,\n 10540,\n 14570,\n 10475,\n 14635,\n 10410,\n 14700,\n 10345,\n 14765,\n 10280,\n 14830,\n 10215,\n 14895,\n 10150,\n 14960,\n 10085,\n 15025,\n 10020,\n 15090,\n 9955,\n 15155,\n 9890,\n 15220,\n 9825,\n 15285,\n 9760,\n 15350,\n 9695,\n 15415,\n 9630,\n 15480,\n 9565,\n 13919,\n 11124,\n 13984,\n 11059,\n 14049,\n 10994,\n 14114,\n 10929,\n 14179,\n 10864,\n 14244,\n 10799,\n 14309,\n 10734,\n 14374,\n 10669,\n 14439,\n 10604,\n 14504,\n 10539,\n 14569,\n 10474,\n 14634,\n 10409,\n 14699,\n 10344,\n 14764,\n 10279,\n 14829,\n 10214,\n 14894,\n 10149,\n 14959,\n 10084,\n 15024,\n 10019,\n 15089,\n 9954,\n 15154,\n 9889,\n 15219,\n 9824,\n 15284,\n 9759,\n 15349,\n 9694,\n 15414,\n 9629,\n 15479,\n 9564,\n 13983,\n 11058,\n 14048,\n 10993,\n 14113,\n 10928,\n 14178,\n 10863,\n 14243,\n 10798,\n 14308,\n 10733,\n 14373,\n 10668,\n 14438,\n 10603,\n 14503,\n 10538,\n 14568,\n 10473,\n 14633,\n 10408,\n 14698,\n 10343,\n 14763,\n 10278,\n 14828,\n 10213,\n 14893,\n 10148,\n 14958,\n 10083,\n 15023,\n 10018,\n 15088,\n 9953,\n 15153,\n 9888,\n 15218,\n 9823,\n 15283,\n 9758,\n 15348,\n 9693,\n 15413,\n 9628,\n 15478,\n 9563,\n 13982,\n 11057,\n 14047,\n 10992,\n 14112,\n 10927,\n 14177,\n 10862,\n 14242,\n 10797,\n 14307,\n 10732,\n 14372,\n 10667,\n 14437,\n 10602,\n 14502,\n 10537,\n 14567,\n 10472,\n 14632,\n 10407,\n 14697,\n 10342,\n 14762,\n 10277,\n 14827,\n 10212,\n 14892,\n 10147,\n 14957,\n 10082,\n 15022,\n 10017,\n 15087,\n 9952,\n 15152,\n 9887,\n 15217,\n 9822,\n 15282,\n 9757,\n 15347,\n 9692,\n 15412,\n 9627,\n 15477,\n 9562,\n 14046,\n 10991,\n 14111,\n 10926,\n 14176,\n 10861,\n 14241,\n 10796,\n 14306,\n 10731,\n 14371,\n 10666,\n 14436,\n 10601,\n 14501,\n 10536,\n 14566,\n 10471,\n 14631,\n 10406,\n 14696,\n 10341,\n 14761,\n 10276,\n 14826,\n 10211,\n 14891,\n 10146,\n 14956,\n 10081,\n 15021,\n 10016,\n 15086,\n 9951,\n 15151,\n 9886,\n 15216,\n 9821,\n 15281,\n 9756,\n 15346,\n 9691,\n 15411,\n 9626,\n 15476,\n 9561,\n 14045,\n 10990,\n 14110,\n 10925,\n 14175,\n 10860,\n 14240,\n 10795,\n 14305,\n 10730,\n 14370,\n 10665,\n 14435,\n 10600,\n 14500,\n 10535,\n 14565,\n 10470,\n 14630,\n 10405,\n 14695,\n 10340,\n 14760,\n 10275,\n 14825,\n 10210,\n 14890,\n 10145,\n 14955,\n 10080,\n 15020,\n 10015,\n 15085,\n 9950,\n 15150,\n 9885,\n 15215,\n 9820,\n 15280,\n 9755,\n 15345,\n 9690,\n 15410,\n 9625,\n 15475,\n 9560,\n 14109,\n 10924,\n 14174,\n 10859,\n 14239,\n 10794,\n 14304,\n 10729,\n 14369,\n 10664,\n 14434,\n 10599,\n 14499,\n 10534,\n 14564,\n 10469,\n 14629,\n 10404,\n 14694,\n 10339,\n 14759,\n 10274,\n 14824,\n 10209,\n 14889,\n 10144,\n 14954,\n 10079,\n 15019,\n 10014,\n 15084,\n 9949,\n 15149,\n 9884,\n 15214,\n 9819,\n 15279,\n 9754,\n 15344,\n 9689,\n 15409,\n 9624,\n 15474,\n 9559,\n 14108,\n 10923,\n 14173,\n 10858,\n 14238,\n 10793,\n 14303,\n 10728,\n 14368,\n 10663,\n 14433,\n 10598,\n 14498,\n 10533,\n 14563,\n 10468,\n 14628,\n 10403,\n 14693,\n 10338,\n 14758,\n 10273,\n 14823,\n 10208,\n 14888,\n 10143,\n 14953,\n 10078,\n 15018,\n 10013,\n 15083,\n 9948,\n 15148,\n 9883,\n 15213,\n 9818,\n 15278,\n 9753,\n 15343,\n 9688,\n 15408,\n 9623,\n 15473,\n 9558,\n 10857,\n 14172,\n 10792,\n 14237,\n 10727,\n 14302,\n 10662,\n 14367,\n 10597,\n 14432,\n 10532,\n 14497,\n 10467,\n 14562,\n 10402,\n 14627,\n 10337,\n 14692,\n 10272,\n 14757,\n 10207,\n 14822,\n 10142,\n 14887,\n 10077,\n 14952,\n 10012,\n 15017,\n 9947,\n 15082,\n 9882,\n 15147,\n 9817,\n 15212,\n 9752,\n 15277,\n 9687,\n 15342,\n 9622,\n 15407,\n 9557,\n 15472,\n 9492,\n 15537,\n 9490,\n 15535,\n 9555,\n 15470,\n 9620,\n 15405,\n 9685,\n 15340,\n 9750,\n 15275,\n 9815,\n 15210,\n 9880,\n 15145,\n 9945,\n 15080,\n 10010,\n 15015,\n 10075,\n 14950,\n 10140,\n 14885,\n 10205,\n 14820,\n 10270,\n 14755,\n 10335,\n 14690,\n 10400,\n 14625,\n 10465,\n 14560,\n 10530,\n 14495,\n 10595,\n 14430,\n 10660,\n 14365,\n 10725,\n 14300,\n 10790,\n 14235,\n 10855,\n 14170,\n 9491,\n 15536,\n 9556,\n 15471,\n 9621,\n 15406,\n 9686,\n 15341,\n 9751,\n 15276,\n 9816,\n 15211,\n 9881,\n 15146,\n 9946,\n 15081,\n 10011,\n 15016,\n 10076,\n 14951,\n 10141,\n 14886,\n 10206,\n 14821,\n 10271,\n 14756,\n 10336,\n 14691,\n 10401,\n 14626,\n 10466,\n 14561,\n 10531,\n 14496,\n 10596,\n 14431,\n 10661,\n 14366,\n 10726,\n 14301,\n 10791,\n 14236,\n 10856,\n 14171,\n 16656,\n 20562,\n 16657,\n 20563,\n 16658,\n 20564,\n 16659,\n 20565,\n 16660,\n 20566,\n 16661,\n 20567,\n 16662,\n 20568,\n 16663,\n 20569,\n 16664,\n 20570,\n 16665,\n 20571,\n 16666,\n 20572,\n 16667,\n 20573,\n 16668,\n 20574,\n 16669,\n 20575,\n 16670,\n 20576,\n 16671,\n 20577,\n 16672,\n 20578,\n 16673,\n 20579,\n 16674,\n 20580,\n 16675,\n 20581,\n 16676,\n 20582,\n 16677,\n 20583,\n 16719,\n 20499,\n 16720,\n 20500,\n 16721,\n 20501,\n 16722,\n 20502,\n 16723,\n 20503,\n 16724,\n 20504,\n 16725,\n 20505,\n 16726,\n 20506,\n 16727,\n 20507,\n 16728,\n 20508,\n 16729,\n 20509,\n 16730,\n 20510,\n 16731,\n 20511,\n 16732,\n 20512,\n 16733,\n 20513,\n 16734,\n 20514,\n 16735,\n 20515,\n 16736,\n 20516,\n 16737,\n 20517,\n 16738,\n 20518,\n 16927,\n 20329,\n 16926,\n 20328,\n 16925,\n 20327,\n 16865,\n 20393,\n 16864,\n 20392,\n 16863,\n 20391,\n 16862,\n 20390,\n 16861,\n 20389,\n 16860,\n 20388,\n 16802,\n 20456,\n 16801,\n 20455,\n 16800,\n 20454,\n 16799,\n 20453,\n 16798,\n 20452,\n 16797,\n 20451,\n 16796,\n 20450,\n 16795,\n 20449,\n 16794,\n 20448,\n 16793,\n 20447,\n 16739,\n 20519,\n];\n\nconst headBreadthIDs: number[][] = [];\n\nfor (let i = 0; i < headBreadthIDsRaw.length; i = i + 2) {\n headBreadthIDs.push([headBreadthIDsRaw[i], headBreadthIDsRaw[i + 1]]);\n}\n\nexport { headBreadthIDs };\n","import { bygozomaticBreadthIds } from './BygozomaticBreadthSearchAreaIds';\nimport { farkasLandmarksID } from './FarkasLandmarks';\nimport { headBreadthIDs } from './HeadBreadthSearchAreaIds';\n\nconst pupils = {\n left: [1115, 1181],\n right: [3065, 3001],\n weights: [0.3, 0.7],\n};\n\nconst ears = {\n left: [10874],\n right: [14059],\n weights: [1],\n};\n\nconst temples = {\n left: [11714],\n right: [13339],\n weights: [1],\n};\n\nconst noseBridge = {\n left: [1839],\n right: [2359],\n weights: [1],\n};\n\nconst zygofrontale = {\n left: [12232],\n right: [12817],\n weights: [1],\n};\n\nconst frontotemporale = {\n left: [11839],\n right: [13204],\n weights: [1],\n};\n\nconst faceWebFB = {\n left: [16746],\n right: [20526],\n weights: [1],\n};\n\nconst infraorbitale = {\n left: [993],\n right: [3203],\n weights: [1],\n};\n\nconst expectedNumberOfVertices = 24409;\n\nexport {\n expectedNumberOfVertices,\n pupils,\n ears,\n temples,\n noseBridge,\n headBreadthIDs,\n farkasLandmarksID,\n bygozomaticBreadthIds,\n zygofrontale,\n frontotemporale,\n faceWebFB,\n infraorbitale,\n};\n","import { vec3 } from 'gl-matrix';\n\n// tslint:disable-next-line: interface-name\ninterface Breadth {\n unscaledResult: {\n vertexCouple: {\n left: number\n right: number;\n };\n distance: number;\n };\n unscaledMeasurements: Array<{\n distance: number;\n coupleId: number;\n coupleVertex: {\n leftId: number;\n rightId: number;\n };\n }>;\n }\n\nclass Distance {\n public pupils = 0.0;\n public ears = 0.0;\n public temples = 0.0;\n public noseBridge = 0.0;\n public headBreadth = -1;\n public zygofrontale = 0.0;\n public frontotemporale = 0.0;\n public infraorbitale = 0.0;\n public bygozomatic = 0.0;\n}\n\n// tslint:disable-next-line: max-classes-per-file\nclass VPosition {\n public left = vec3.create();\n public right = vec3.create();\n public vertices = {\n left: [-1],\n right: [-1],\n weights: [1],\n };\n}\n\n// tslint:disable-next-line: max-classes-per-file\nclass Measurements {\n public position = {\n pupils: new VPosition(),\n ears: new VPosition(),\n temples: new VPosition(),\n noseBridge: new VPosition(),\n headBreadth: new VPosition(),\n bygozomatic: new VPosition(),\n zygofrontale: new VPosition(),\n frontotemporale: new VPosition(),\n faceWebFB: new VPosition(),\n infraorbitale: new VPosition(),\n };\n\n public distance = new Distance();\n\n public scaledDistance = new Distance();\n\n public headBreadthUnscaledResults?: Breadth;\n public bygozomaticBreadthUnscaledResults?: Breadth;\n\n public scale = {\n glasses: 1.0,\n head: 1.0,\n };\n}\n\nexport { Measurements, VPosition };\n","import { vec3 } from 'gl-matrix';\nimport { Inspector } from '../../Inspector';\nimport {\n bygozomaticBreadthIds,\n ears,\n frontotemporale,\n faceWebFB,\n headBreadthIDs,\n infraorbitale,\n noseBridge,\n pupils,\n temples,\n zygofrontale,\n} from '../data/GeometryData';\nimport { Measurements, VPosition } from '../data/Measurements';\n\nclass MeasureCalculator {\n private head: Float32Array = new Float32Array();\n private measurementsData: Measurements = new Measurements();\n private debug = false;\n\n constructor(debug: boolean) {\n this.debug = debug || false;\n }\n\n public setHead(head: Float32Array) {\n this.head = head;\n this.calcMeasurements();\n }\n\n public setPD(pupillaryDistance: number, showInspector: boolean): void {\n // Get the location of the center of the left and right eye in the 3D\n // model, and get the distance between them\n const headPD = vec3.dist(\n this.measurementsData.position.pupils.left,\n this.measurementsData.position.pupils.right,\n );\n if (showInspector) {\n Inspector.addLine(headPD, 'headPD');\n }\n this.measurementsData.scale.glasses = headPD / pupillaryDistance;\n this.measurementsData.scale.head = pupillaryDistance / headPD;\n this.calcMeasurements();\n }\n\n public setFB(faceBreadth: number, showInspector: boolean): void {\n const headFB = vec3.dist(\n this.measurementsData.position.faceWebFB.left,\n this.measurementsData.position.faceWebFB.right,\n );\n if (showInspector) {\n Inspector.addLine(headFB, 'headFB');\n }\n this.measurementsData.scale.glasses = headFB / faceBreadth;\n this.measurementsData.scale.head = faceBreadth / headFB;\n this.calcMeasurements();\n }\n\n public get measurements() {\n return this.measurementsData;\n }\n\n public getVerticesFromArray(ids: number[]): vec3[] {\n const vertices: vec3[] = [];\n ids.forEach((id) => {\n vertices.push(\n this.getVertex(id),\n );\n });\n return vertices;\n }\n\n private findBreadthFromIDs(breadthIds: number[][]) {\n const unscaledResult = {\n vertexCouple: {\n left: -1,\n right: -1,\n },\n distance: -1,\n };\n const unscaledMeasurements = breadthIds.map((vertexCouple, coupleId) => {\n const a = this.getVertex(vertexCouple[0]);\n const b = this.getVertex(vertexCouple[1]);\n const distance = vec3.dist(a, b);\n if (distance > unscaledResult.distance) {\n unscaledResult.vertexCouple.left = vertexCouple[0];\n unscaledResult.vertexCouple.right = vertexCouple[1];\n unscaledResult.distance = distance;\n }\n return {\n distance,\n coupleId,\n coupleVertex: {\n leftId: vertexCouple[0],\n rightId: vertexCouple[1],\n },\n };\n }).sort((a, b) => b.distance - a.distance);\n return {unscaledResult, unscaledMeasurements};\n }\n\n private calcMeasurements() {\n const headBreadthResults = this.findBreadthFromIDs(headBreadthIDs);\n const bygozomaticBreadthResults = this.findBreadthFromIDs(bygozomaticBreadthIds);\n\n this.measurementsData.position = {\n pupils: this.processVertex(pupils),\n ears: this.processVertex(ears),\n temples: this.processVertex(temples),\n noseBridge: this.processVertex(noseBridge),\n zygofrontale: this.processVertex(zygofrontale),\n frontotemporale: this.processVertex(frontotemporale),\n faceWebFB: this.processVertex(faceWebFB),\n infraorbitale: this.processVertex(infraorbitale),\n headBreadth: {\n left: this.getVertex(headBreadthResults.unscaledResult.vertexCouple.left),\n right: this.getVertex(headBreadthResults.unscaledResult.vertexCouple.right),\n vertices: {\n left: [headBreadthResults.unscaledResult.vertexCouple.left],\n right: [headBreadthResults.unscaledResult.vertexCouple.right],\n weights: [1],\n },\n },\n bygozomatic: {\n left: this.getVertex(bygozomaticBreadthResults.unscaledResult.vertexCouple.left),\n right: this.getVertex(bygozomaticBreadthResults.unscaledResult.vertexCouple.right),\n vertices: {\n left: [bygozomaticBreadthResults.unscaledResult.vertexCouple.left],\n right: [bygozomaticBreadthResults.unscaledResult.vertexCouple.right],\n weights: [1],\n },\n },\n };\n this.measurementsData.distance = {\n pupils: vec3.distance(\n this.measurementsData.position.pupils.left,\n this.measurementsData.position.pupils.right,\n ),\n ears: vec3.distance(\n this.measurementsData.position.ears.left,\n this.measurementsData.position.ears.right,\n ),\n temples: vec3.distance(\n this.measurementsData.position.temples.left,\n this.measurementsData.position.temples.right,\n ),\n noseBridge: vec3.distance(\n this.measurementsData.position.noseBridge.left,\n this.measurementsData.position.noseBridge.right,\n ),\n headBreadth: headBreadthResults.unscaledResult.distance,\n zygofrontale: vec3.distance(\n this.measurementsData.position.zygofrontale.left,\n this.measurementsData.position.zygofrontale.right,\n ),\n frontotemporale: vec3.distance(\n this.measurementsData.position.frontotemporale.left,\n this.measurementsData.position.frontotemporale.right,\n ),\n infraorbitale: vec3.distance(\n this.measurementsData.position.infraorbitale.left,\n this.measurementsData.position.infraorbitale.right,\n ),\n bygozomatic: bygozomaticBreadthResults.unscaledResult.distance,\n };\n\n this.measurementsData.scaledDistance = {\n ears: this.measurements.distance.ears * this.measurementsData.scale.head,\n headBreadth: this.measurements.distance.headBreadth * this.measurementsData.scale.head,\n noseBridge: this.measurements.distance.noseBridge * this.measurementsData.scale.head,\n pupils: this.measurements.distance.pupils * this.measurementsData.scale.head,\n temples: this.measurements.distance.temples * this.measurementsData.scale.head,\n zygofrontale: this.measurements.distance.zygofrontale * this.measurementsData.scale.head,\n frontotemporale: this.measurements.distance.frontotemporale * this.measurementsData.scale.head,\n infraorbitale: this.measurements.distance.infraorbitale * this.measurementsData.scale.head,\n bygozomatic: this.measurements.distance.bygozomatic * this.measurementsData.scale.head,\n };\n\n if (this.debug) {\n this.measurementsData.headBreadthUnscaledResults = headBreadthResults;\n this.measurementsData.bygozomaticBreadthUnscaledResults = bygozomaticBreadthResults;\n }\n }\n\n private processVertex(vertexCouple: {\n left: number[];\n right: number[];\n weights: number[];\n }): VPosition {\n const returnedValue = new VPosition();\n returnedValue.left = this.getLeft(vertexCouple);\n returnedValue.right = this.getRight(vertexCouple);\n returnedValue.vertices = {...vertexCouple};\n return returnedValue;\n }\n\n private getLeft(vertexCouple: {\n left: number[];\n right: number[];\n weights: number[];\n }): vec3 {\n return this.getWeightedPosition(vertexCouple.left, vertexCouple.weights);\n }\n private getRight(vertexCouple: {\n left: number[];\n right: number[];\n weights: number[];\n }): vec3 {\n return this.getWeightedPosition(vertexCouple.right, vertexCouple.weights);\n }\n\n private getWeightedPosition(indices: number[], weights: number[]): vec3 {\n const position = vec3.create();\n for (let k = 0; k < indices.length; k++) {\n const pt = this.getVertex(indices[k]);\n vec3.scale(pt, pt, weights[k]);\n vec3.add(position, position, pt);\n }\n return position;\n }\n\n private getVertex(id: number): vec3 {\n const idx = 3 * id;\n return vec3.fromValues(\n this.head[idx],\n this.head[idx + 1],\n this.head[idx + 2],\n );\n }\n}\n\nexport { MeasureCalculator };\n","import {Euler, Quaternion, Vector3} from 'three';\n\nexport class HeadPoses {\n private headPoses: number[][];\n\n public overwriteHeadPoses(newHeadPoses: number[][]) {\n this.headPoses = newHeadPoses;\n }\n public setHeadPoses(newHeadPose: number[]): void {\n if (this.headPoses && this.headPoses.length === 1) {\n this.headPoses[0] = newHeadPose;\n } else {\n this.headPoses = [newHeadPose];\n }\n }\n\n public getHeadPosesLenght(): number {\n if (!this.headPoses) { return 0; }\n return this.headPoses.length;\n }\n\n public getHeadPose(id: number): number[] {\n const pose = Math.floor(this.headPoses.length/15 * id);\n return this.headPoses[pose];\n }\n}\n\n// TODO: move the lines below to another file\n//these are poses taken from \"Alessandra\" model and are used as reference for choosing the right triangulation order of B3D glasses in real time (discretized according these 15 poses)\nconst standardHeadPoses = [\n [ -4.68025729e-02, 6.59019709e-01, -2.17770860e-02, -3.15571880e+01, -1.64211578e+01, 1.16281470e+03 ],\n [ -4.25520539e-02, 5.72433889e-01, -3.28456461e-02, -2.73660488e+01, -1.68190136e+01, 1.16301294e+03 ],\n [ -4.96246144e-02, 4.49078977e-01, -2.78871395e-02, -2.21448956e+01, -1.73423748e+01, 1.16304968e+03 ],\n [ -5.28279245e-02, 3.70562792e-01, -2.95299999e-02, -1.88586960e+01, -1.76550007e+01, 1.16307324e+03 ],\n [ -5.36841229e-02, 2.78562456e-01, -2.93919723e-02, -1.51379223e+01, -1.78912792e+01, 1.16314233e+03 ],\n [ -5.42019084e-02, 1.78358495e-01, -2.68243197e-02, -1.08982706e+01, -1.78618660e+01, 1.16327490e+03 ],\n [ -5.23329154e-02, 1.10535555e-01, -1.85423587e-02, -8.19452000e+00, -1.77287960e+01, 1.16346436e+03 ],\n [ -5.28215989e-02, 2.72239977e-03, -1.41970394e-02, -3.57266426e+00, -1.75036087e+01, 1.16362207e+03 ],\n [ -5.36720008e-02, -1.07193567e-01, -2.85431603e-03, 9.91837978e-01, -1.70843868e+01, 1.16373254e+03 ],\n [ -5.65016605e-02, -1.98633254e-01, 3.45611479e-03, 4.58538103e+00, -1.67623043e+01, 1.16372839e+03 ],\n [ -5.02191074e-02, -3.02109808e-01, 7.12994998e-03, 8.72800255e+00, -1.63030472e+01, 1.16398511e+03 ],\n [ -4.71441671e-02, -3.88525695e-01, 6.48704264e-03, 1.19398003e+01, -1.55111084e+01, 1.16416003e+03 ],\n [ -3.63192745e-02, -4.96765912e-01, 1.05245225e-02, 1.55081024e+01, -1.43693810e+01, 1.16448352e+03 ],\n [ -3.16144079e-02, -5.82286417e-01, 1.45750409e-02, 1.80729675e+01, -1.36445789e+01, 1.16461792e+03 ],\n [ -2.61080787e-02, -6.94627166e-01, -7.06411945e-03, 2.32427101e+01, -1.23556538e+01, 1.16500012e+03 ]\n];\nconst poses = new Array();\n\nstandardHeadPoses.map((x: number[])=>{\n poses.push(new Quaternion().setFromEuler(new Euler(x[0], x[1], x[2])));\n});\n\nexport const getNearestPoseOrientation = (sourceOrientation: Euler): number => {\n const sourceQuaternion = new Quaternion().setFromEuler(sourceOrientation);\n const distances: number[] = [];\n \n //calculates distance between source and candidates\n poses.map((q)=>{\n const candidateQ = new Quaternion().copy(q);\n const distanceQuaternion = candidateQ.invert().multiply(sourceQuaternion);\n const vectorPart = new Vector3(distanceQuaternion.x, distanceQuaternion.y, distanceQuaternion.z);\n distances.push(2 * Math.atan2(vectorPart.length(), distanceQuaternion.w));\n });\n\n return distances.indexOf(Math.min.apply(null, distances));\n};\n\nexport const getStandardHeadPose = (id: number): number[] => {\n return standardHeadPoses[id];\n};","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../package.json';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'GLUtils');\nexport default class GlUtils {\n\n public static supportsRendering(): boolean {\n let gl;\n let canvas;\n\n try {\n canvas = document.createElement('canvas');\n gl = GlUtils.getContext(\n canvas,\n {\n premultipliedAlpha: false,\n depth: true\n }\n );\n } catch (x) {\n return false;\n }\n canvas = undefined;\n return gl !== undefined;\n }\n\n public static getContext(\n canvas: HTMLCanvasElement,\n attributes?: WebGLContextAttributes,\n ): WebGLRenderingContext {\n const webglContextAttributes: WebGLContextAttributes = attributes ? attributes : {};\n const webglContext = this.getWebglContext(\n canvas,\n ['webgl2', 'webgl', 'experimental-webgl'],\n webglContextAttributes);\n return webglContext;\n }\n\n private static getWebglContext(\n canvas: HTMLCanvasElement,\n webglContext: string[],\n webglContextAttributes: WebGLContextAttributes\n ): WebGLRenderingContext {\n let webglRenderingContext: any;\n for (const contextName of webglContext) {\n webglRenderingContext = canvas.getContext(contextName, webglContextAttributes);\n if (webglRenderingContext) {\n break;\n } else {\n logger.warn(contextName + ' is not supported');\n }\n }\n if (!webglRenderingContext) {\n logger.error('WebGL context not available');\n }\n return webglRenderingContext;\n }\n\n public static setTextureParams(\n gl: any\n ) {\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n }\n\n public static compileShader(\n gl: any,\n type: any,\n source: any\n ) {\n const sh = gl.createShader(type);\n gl.shaderSource(sh, source);\n gl.compileShader(sh);\n if (!gl.getShaderParameter(sh, gl.COMPILE_STATUS)) {\n throw new Error('compile shader error (' + type + '): ' +\n gl.getShaderInfoLog(sh));\n }\n return sh;\n }\n\n public static checkError(\n gl: any,\n message: string\n ) {\n if (process.env.NODE_ENV === 'development' || true) {\n const err = gl.getError();\n if (err !== gl.NO_ERROR) {\n throw new Error(message + ', error: ' + err);\n }\n }\n }\n\n public static checkFramebuffer(\n gl: any,\n message: string\n ) {\n if (process.env.NODE_ENV === 'development') {\n const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(message + ' status: ' + status);\n }\n }\n }\n\n public static createProgram(\n gl: WebGLRenderingContext,\n vertSrc: any,\n fragSrc: any,\n attributes: any,\n uniforms: any,\n programIdentifier: string,\n ): WebGLProgram {\n logger.debug('creating {}', programIdentifier);\n const proj = gl.createProgram();\n\n logger.debug('compiling vertex shader');\n const vsh = this.compileShader(gl, gl.VERTEX_SHADER, vertSrc);\n if (!gl.getShaderParameter(vsh, gl.COMPILE_STATUS)) {\n throw new Error('Vertex shader ' + gl.getShaderInfoLog(vsh));\n }\n gl.attachShader(proj, vsh);\n this.checkError(gl, 'attach vertex shader');\n\n logger.debug('compiling fragment shader');\n const fsh = this.compileShader(gl, gl.FRAGMENT_SHADER, fragSrc);\n if (!gl.getShaderParameter(fsh, gl.COMPILE_STATUS)) {\n throw new Error('Fragment shader ' + gl.getShaderInfoLog(fsh));\n }\n gl.attachShader(proj, fsh);\n this.checkError(gl, 'attach fragment shaders');\n\n for (const property in attributes) {\n if (attributes.hasOwnProperty(property)) {\n gl.bindAttribLocation(proj, attributes[property], property);\n this.checkError(gl, 'bindAttribLocation ' + property);\n }\n }\n\n /*\n // check for attribute consistency, useful for debug purpose\n for (const property in attributes) {\n if (attributes.hasOwnProperty(property)) {\n const attribLocatin = gl.getAttribLocation(proj, property);\n if (attribLocatin !== attributes[property]) {\n const message = `${programIdentifier}:\nAttribute ${property} wrong location got ${attribLocatin} expected ${attributes[property]}`;\n throw new Error(message);\n }\n }\n } */\n\n gl.linkProgram(proj);\n if (!gl.getProgramParameter(proj, gl.LINK_STATUS)) {\n const errmsg = gl.getError();\n const logmsg = gl.getProgramInfoLog(proj);\n throw new Error('Link program error: ' + logmsg + ' ' + errmsg);\n }\n\n for (const property in attributes) {\n if (attributes.hasOwnProperty(property)) {\n const loc = gl.getAttribLocation(proj, property);\n if (loc !== attributes[property]) {\n throw new Error('Error binding attribute ' + property);\n }\n this.checkError(gl, 'bindAttribLocation ' + property);\n }\n }\n\n gl.validateProgram(proj);\n if (!gl.getProgramParameter(proj, gl.VALIDATE_STATUS)) {\n throw new Error('Validation error: ' + gl.getProgramInfoLog(proj));\n }\n for (const property in uniforms) {\n if (uniforms.hasOwnProperty(property)) {\n uniforms[property] = gl.getUniformLocation(proj, property);\n this.checkError(gl, 'getUniformLocation ' + property);\n }\n }\n\n return proj;\n }\n\n public static setColorTextureBufferRGBA(\n gl: WebGLRenderingContext,\n texture: WebGLTexture,\n buffer: Uint8Array,\n bufferWidth: number,\n bufferHeight: number,\n unit: number,\n msg: string,\n ): void {\n // 0 is empty, the buffer length must be a multiple of 4 to represent RGBA\n if (buffer.length === 0 || buffer.length % 4 !== 0) {\n logger.error('Error, empty or invalid image buffer ' + msg);\n return;\n }\n\n gl.activeTexture(unit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, bufferWidth, bufferHeight, 0, gl.RGBA, gl.UNSIGNED_BYTE, buffer);\n\n if (GlUtils.isPowerOf2(bufferWidth) && GlUtils.isPowerOf2(bufferHeight)) {\n // Yes, it's a power of 2. Generate mips.\n gl.generateMipmap(gl.TEXTURE_2D);\n } else {\n // No, it's not a power of 2. Turn of mips and set wrapping to clamp to edge\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n }\n\n gl.bindTexture(gl.TEXTURE_2D, undefined);\n GlUtils.checkError(gl, msg);\n }\n\n public static setColorTexture(\n gl: WebGLRenderingContext,\n texture: WebGLTexture,\n image: HTMLImageElement,\n unit: number,\n msg: string,\n format?: number\n ): void {\n\n if (image.width === 0 || image.height === 0) {\n logger.error('Error, empty image ' + msg);\n return;\n }\n\n if (!format) {\n format = gl.RGBA;\n }\n\n gl.activeTexture(unit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, format, format, gl.UNSIGNED_BYTE, image);\n\n if (GlUtils.isPowerOf2(image.width) && GlUtils.isPowerOf2(image.height)) {\n // Yes, it's a power of 2. Generate mips.\n gl.generateMipmap(gl.TEXTURE_2D);\n } else {\n // No, it's not a power of 2. Turn of mips and set wrapping to clamp to edge\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n }\n\n gl.bindTexture(gl.TEXTURE_2D, undefined);\n GlUtils.checkError(gl, msg);\n }\n\n public static loadColorTexture(\n gl: WebGLRenderingContext,\n texture: WebGLTexture,\n base64Image: string,\n unit: number,\n msg: string,\n format?: number\n ): Promise {\n return new Promise((resolve) => {\n const img = new Image();\n // neceessary to set cross origin to wildcard to avoid issues with GL context\n img.crossOrigin = '*';\n img.src = base64Image;\n img.onload = () => {\n if (img.width === 0 || img.height === 0) {\n logger.error('Error, empty image ' + msg + ' ' + img.src);\n return;\n }\n\n if (!format) {\n format = gl.RGBA;\n }\n\n // bind data\n gl.activeTexture(unit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, format, format, gl.UNSIGNED_BYTE, img);\n\n if (GlUtils.isPowerOf2(img.width) && GlUtils.isPowerOf2(img.height)) {\n // Yes, it's a power of 2. Generate mips.\n gl.generateMipmap(gl.TEXTURE_2D);\n } else {\n // No, it's not a power of 2. Turn of mips and set wrapping to clamp to edge\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n }\n\n // unbind\n gl.bindTexture(gl.TEXTURE_2D, undefined);\n GlUtils.checkError(gl, msg);\n resolve();\n };\n });\n }\n\n public static isPowerOf2(value) {\n return (value & (value - 1)) === 0;\n }\n}\n","import GlUtils from './GlUtils';\nimport blendFragment9 from './shaders/blend9.frag';\nimport blendVertex9 from './shaders/blend9.vert';\nimport blur3Fragment from './shaders/blur_3.frag';\nimport blur3Vertex from './shaders/blur_3.vert';\nimport depthRenderFS from './shaders/depth_render.frag';\nimport depthRenderFrontVS from './shaders/depth_render_FRONT.vert';\nimport depthRenderUpVS from './shaders/depth_render_UP.vert';\nimport flatColorFS from './shaders/flat_color.frag';\nimport flatColorVS from './shaders/flat_color.vert';\nimport smoothFragment9 from './shaders/smooth9.frag';\nimport smoothVertex9 from './shaders/smooth9.vert';\nimport warpFragment from './shaders/warp.frag';\nimport warpAlphaFragment from './shaders/warp_alpha.frag';\nimport warpAlphaVertex from './shaders/warp_alpha.vert';\nimport warpBlendFS from './shaders/warp_blend.frag';\nimport warpBlendVS from './shaders/warp_blend.vert';\nimport warpBlueGlassesFragment from './shaders/warp_blue_glasses.frag';\nimport warpBlueGlassesVertex from './shaders/warp_blue_glasses.vert';\nimport warpMirror from './shaders/warp_mirror.vert';\nimport warpVto from './shaders/warp_vto.vert';\nexport default class GLPrograms {\n\n public static readonly POSITION_ATTRIBUTE = 0;\n public static readonly TEX0_COORD_ATTRIBUTE = 2;\n public static readonly COLOR_ATTRIBUTE = 4;\n\n public static readonly ATTRIB_POS_TEXTURE = {\n position: GLPrograms.POSITION_ATTRIBUTE,\n textureCoord: GLPrograms.TEX0_COORD_ATTRIBUTE\n };\n\n public static readonly ATTRIB_POS_TEXTURE_COLOR = {\n position: GLPrograms.POSITION_ATTRIBUTE,\n textureCoord: GLPrograms.TEX0_COORD_ATTRIBUTE,\n vertexColor: GLPrograms.COLOR_ATTRIBUTE\n };\n\n public static readonly ATTRIB_POS = {\n position: GLPrograms.POSITION_ATTRIBUTE\n };\n\n\n public createSmoother(\n gl: any\n ) {\n\n // The first program does a line gaussian smoothing.\n const smoother = {\n uniforms: undefined,\n program: undefined\n };\n smoother.uniforms = {\n filterStep: undefined,\n textr: undefined\n };\n smoother.program = GlUtils.createProgram(\n gl,\n smoothVertex9,\n smoothFragment9,\n GLPrograms.ATTRIB_POS_TEXTURE,\n smoother.uniforms,\n 'smoother program');\n GlUtils.checkError(gl, 'smoother program creation');\n\n return smoother;\n }\n\n // This one also does the gaussian line smoothing, then blends the result\n // with the background. This saves a draw call\n public createBlender(\n gl\n ) {\n\n const blender = {\n uniforms: undefined,\n program: undefined\n };\n blender.uniforms = {\n matrix: undefined,\n filterStep: undefined,\n textr: undefined,\n shade: undefined\n };\n blender.program = GlUtils.createProgram(\n gl,\n blendVertex9,\n blendFragment9,\n GLPrograms.ATTRIB_POS_TEXTURE,\n blender.uniforms,\n 'blender program'\n );\n GlUtils.checkError(gl, 'blnder creation');\n\n return blender;\n }\n\n public createWarper(\n gl,\n mirror: boolean\n ) {\n\n const warpVertex = mirror ? warpMirror : warpVto;\n\n const warper = {\n uniforms: undefined,\n program: undefined\n };\n warper.uniforms = {\n matrix: undefined,\n textr: undefined,\n texOffset: undefined\n };\n warper.program = GlUtils.createProgram(\n gl,\n warpVertex,\n warpFragment,\n GLPrograms.ATTRIB_POS_TEXTURE,\n warper.uniforms,\n 'warper program');\n GlUtils.checkError(gl, 'warper creation');\n\n return warper;\n }\n\n public createWarperAlpha(\n gl\n ) {\n\n const warperAlpha = {\n uniforms: undefined,\n program: undefined\n };\n warperAlpha.uniforms = {\n matrix: undefined,\n textr: undefined,\n channel: undefined\n };\n warperAlpha.program = GlUtils.createProgram(\n gl,\n warpAlphaVertex,\n warpAlphaFragment,\n GLPrograms.ATTRIB_POS_TEXTURE,\n warperAlpha.uniforms,\n 'alpha program');\n GlUtils.checkError(gl, 'warperAlpha creation');\n\n return warperAlpha;\n }\n\n public createBlueWarper(\n gl\n ) {\n\n const blueWarper = {\n uniforms: undefined,\n program: undefined\n };\n blueWarper.uniforms = {\n matrix: undefined,\n textr: undefined\n };\n blueWarper.program = GlUtils.createProgram(\n gl,\n warpBlendVS,\n warpBlendFS,\n GLPrograms.ATTRIB_POS_TEXTURE, blueWarper.uniforms,\n 'blue warper program'\n );\n GlUtils.checkError(gl, 'blue warper creation');\n\n return blueWarper;\n }\n\n public createBlueGlassesWarper(\n gl: any\n ) {\n\n const blueGlassesWarper = {\n uniforms: undefined,\n program: undefined\n };\n blueGlassesWarper.uniforms = {\n matrix: undefined,\n textr: undefined\n };\n blueGlassesWarper.program = GlUtils.createProgram(\n gl,\n warpBlueGlassesVertex,\n warpBlueGlassesFragment,\n GLPrograms.ATTRIB_POS_TEXTURE,\n blueGlassesWarper.uniforms,\n 'blue warper glasses program'\n );\n GlUtils.checkError(gl, 'blue warper glasses creation');\n\n return blueGlassesWarper;\n }\n\n public createBlur3(\n gl: any\n ) {\n\n const blur3 = {\n uniforms: undefined,\n program: undefined\n };\n blur3.uniforms = {\n filterStep: undefined,\n textr: undefined,\n texOffset: undefined,\n cropInfo: undefined\n };\n blur3.program = GlUtils.createProgram(\n gl,\n blur3Vertex,\n blur3Fragment,\n GLPrograms.ATTRIB_POS_TEXTURE, blur3.uniforms,\n 'blur3 program'\n );\n GlUtils.checkError(gl, 'blur3 creation');\n\n return blur3;\n }\n\n public createFlatColorWarper(\n gl: any\n ) {\n\n const warperFlat = {\n uniforms: undefined,\n program: undefined\n };\n warperFlat.uniforms = {\n matrix: undefined,\n color: undefined\n };\n warperFlat.program = GlUtils.createProgram(\n gl,\n flatColorVS,\n flatColorFS,\n GLPrograms.ATTRIB_POS,\n warperFlat.uniforms,\n 'flat color warper program'\n );\n GlUtils.checkError(gl, 'warperFlat creation');\n\n return warperFlat;\n }\n\n public createDepthRenderer(\n gl: any,\n position: 'FRONT' | 'UP',\n ) {\n\n const depthRenderer = {\n uniforms: undefined,\n program: undefined\n };\n depthRenderer.uniforms = {\n matrix: undefined,\n modelMinZ: undefined,\n modelMaxZ: undefined,\n cullYmin: undefined,\n cullYmax: undefined,\n cullXMin: undefined,\n };\n let vertexShader;\n switch (position) {\n case 'FRONT':\n vertexShader = depthRenderFrontVS;\n break;\n case 'UP':\n vertexShader = depthRenderUpVS;\n break;\n default:\n vertexShader = depthRenderFrontVS;\n break;\n }\n depthRenderer.program = GlUtils.createProgram(\n gl,\n vertexShader,\n depthRenderFS,\n GLPrograms.ATTRIB_POS,\n depthRenderer.uniforms,\n 'depth renderer program'\n );\n GlUtils.checkError(gl, 'depthRenderer creation');\n\n return depthRenderer;\n }\n}\n","import { mat4, vec3 } from 'gl-matrix';\nimport GLPrograms from '../GlPrograms';\nimport GlUtils from '../GlUtils';\nimport { GlRenderDebugOptions } from '../objects/GlRenderDebugOptions';\nimport { RenderCanvasParameters } from '../RenderDataUtils';\n\nclass DepthRenderer {\n public static topViewInfiniteValue = 1000.0;\n public static topDepthDebugView = 'top-depth-buffer';\n public static frontDepthDebugView = 'frontal-depth-buffer';\n\n public static modelBoxMinZTopV = 0;\n public static modelBoxMaxZTopV = 0;\n public static modelBoxMinEye = 0;\n\n public static renderTopShapeDepth(\n perspectiveCameraMat: mat4,\n globalShapeHomogeneous: Float32Array,\n triangulation: Uint16Array,\n zHeadForDepthRender: number,\n renderParams: RenderCanvasParameters,\n debug: GlRenderDebugOptions,\n ): Float32Array {\n const t0 = performance.now();\n const mycanvas = document.createElement('canvas');\n mycanvas.width = renderParams.canvasWidth;\n mycanvas.height = renderParams.canvasHeight;\n\n if (debug.depth) {\n const oldContainer = document.getElementById(this.topDepthDebugView);\n if (oldContainer) {\n document.body.removeChild(oldContainer);\n }\n // visualize canvas in page\n const depthContainer = document.createElement('div');\n depthContainer.style.width = `${renderParams.canvasWidth}px`;\n depthContainer.style.height = `${renderParams.canvasHeight}px`;\n depthContainer.style.position = 'relative';\n depthContainer.id = this.topDepthDebugView;\n depthContainer.appendChild(mycanvas);\n document.body.appendChild(depthContainer);\n }\n const gl = GlUtils.getContext(\n mycanvas,\n {\n premultipliedAlpha: false,\n depth: true\n }\n );\n\n const glPrograms = new GLPrograms();\n const depthRenderer = glPrograms.createDepthRenderer(gl, 'UP');\n GlUtils.checkError(gl, 'creating depth renderer');\n\n // create the VBO, IBO\n const headVBO = gl.createBuffer();\n const headIBO = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, headVBO);\n gl.bufferData(gl.ARRAY_BUFFER, globalShapeHomogeneous, gl.STATIC_DRAW);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, headIBO);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, triangulation, gl.STATIC_DRAW);\n GlUtils.checkError(gl, 'buffer setup');\n\n gl.useProgram(depthRenderer.program);\n\n gl.viewport(0, 0, renderParams.canvasWidth, renderParams.canvasHeight);\n gl.clearColor(1.0, 0.0, 0.0, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n\n // setup matrices. No head rotation\n const noseTipZ = globalShapeHomogeneous[4 * 2112 + 2];\n const noseTopY = globalShapeHomogeneous[4 * 2094 + 1];\n const noseRootY = globalShapeHomogeneous[4 * 2111 + 1];\n const eyeGland = globalShapeHomogeneous[4 * 1638 + 0]; // x component\n // translate the head far from camera and offset position to have the nose tip at the center of the screen\n const headTrans = vec3.fromValues(0.0, noseTipZ, zHeadForDepthRender);\n const headMat = mat4.create();\n mat4.fromTranslation(headMat, headTrans);\n const scaleMat = mat4.create();\n mat4.fromScaling(scaleMat, [1.0, -1.0, -1.0]);\n mat4.mul(headMat, scaleMat, headMat);\n // rotate the head t0 render it from top\n const rotation = 90 * Math.PI / 180.0;\n mat4.rotateX(headMat, headMat, rotation);\n\n // transform the camera\n const viewMatrix = mat4.create();\n const viewProjectionMatrix = mat4.create();\n mat4.mul(viewProjectionMatrix, perspectiveCameraMat, viewMatrix);\n\n this.modelBoxMinZTopV = 1.1 * noseTopY;\n this.modelBoxMaxZTopV = noseRootY;\n this.modelBoxMinEye = eyeGland;\n const zBoxScale = this.modelBoxMaxZTopV - this.modelBoxMinZTopV;\n // debugger;\n const headMVPMat = mat4.create();\n mat4.mul(headMVPMat, viewProjectionMatrix, headMat);\n // render the head\n gl.enable(gl.CULL_FACE);\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(gl.LEQUAL);\n gl.cullFace(gl.FRONT);\n gl.disable(gl.BLEND);\n\n gl.uniform1f(depthRenderer.uniforms.modelMinZ, this.modelBoxMinZTopV);\n gl.uniform1f(depthRenderer.uniforms.modelMaxZ, this.modelBoxMaxZTopV);\n\n // set the culling values to cut the mesh\n gl.uniform1f(depthRenderer.uniforms.cullYmin, this.modelBoxMinZTopV);\n gl.uniform1f(depthRenderer.uniforms.cullYmax, this.modelBoxMaxZTopV);\n gl.uniform1f(depthRenderer.uniforms.cullXMin, this.modelBoxMinEye);\n\n gl.uniformMatrix4fv(depthRenderer.uniforms.matrix, false, headMVPMat);\n gl.enableVertexAttribArray(GLPrograms.ATTRIB_POS.position);\n gl.vertexAttribPointer(GLPrograms.ATTRIB_POS.position, 4, gl.FLOAT,\n false, 4 * 4, 0);\n gl.drawElements(gl.TRIANGLES, triangulation.length, gl.UNSIGNED_SHORT, 0);\n\n GlUtils.checkError(gl, 'after depth2RGBA render');\n // no need to disable anything since we're discarding everything after\n // this pass\n // get pixels and cleanup\n const canvasArea = renderParams.canvasWidth * renderParams.canvasHeight;\n const depthAsRGBA = new Uint8Array(4 * canvasArea);\n\n gl.readPixels(0, 0, renderParams.canvasWidth, renderParams.canvasHeight,\n gl.RGBA, gl.UNSIGNED_BYTE, depthAsRGBA);\n const t1 = performance.now();\n\n GlUtils.checkError(gl, 'after readPixels');\n // convert to float\n const depthFloat = new Float32Array(canvasArea);\n\n // extract the local vertex height\n for (let k = 0; k < (4 * canvasArea); k += 4) {\n // if background, check if red channel is not equal to green channel\n // resulting value should be close to infinite\n if (depthAsRGBA[k] !== depthAsRGBA[k + 1]) {\n depthFloat[k / 4] = DepthRenderer.topViewInfiniteValue;\n } else {\n depthFloat[k / 4] = depthAsRGBA[k] * zBoxScale / 255.0;\n depthFloat[k / 4] += this.modelBoxMinZTopV;\n }\n }\n const t2 = performance.now();\n\n return depthFloat;\n }\n\n public static renderFrontalShapeDepth(\n cameraMat: mat4,\n globalShapeHomogeneous: Float32Array,\n triangulation: Uint16Array,\n zHeadForDepthRender: number,\n renderParams: RenderCanvasParameters,\n debug: GlRenderDebugOptions,\n ): Float32Array {\n const t0 = performance.now();\n const mycanvas = document.createElement('canvas');\n mycanvas.width = renderParams.canvasWidth;\n mycanvas.height = renderParams.canvasHeight;\n if (debug.depth) {\n const oldContainer = document.getElementById(this.frontDepthDebugView);\n if (oldContainer) {\n document.body.removeChild(oldContainer);\n }\n // visualize canvas in page\n const depthContainer = document.createElement('div');\n depthContainer.style.width = `${renderParams.canvasWidth}px`;\n depthContainer.style.height = `${renderParams.canvasHeight}px`;\n depthContainer.style.position = 'relative';\n depthContainer.id = this.frontDepthDebugView;\n depthContainer.appendChild(mycanvas);\n document.body.appendChild(depthContainer);\n }\n const gl = GlUtils.getContext(\n mycanvas,\n {\n premultipliedAlpha: false,\n depth: true\n }\n );\n\n const glPrograms = new GLPrograms();\n const depthRenderer = glPrograms.createDepthRenderer(gl, 'FRONT');\n GlUtils.checkError(gl, 'creating depth renderer');\n\n // create the VBO, IBO\n const headVBO = gl.createBuffer();\n const headIBO = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, headVBO);\n gl.bufferData(gl.ARRAY_BUFFER, globalShapeHomogeneous, gl.STATIC_DRAW);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, headIBO);\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, triangulation, gl.STATIC_DRAW);\n GlUtils.checkError(gl, 'buffer setup');\n\n gl.useProgram(depthRenderer.program);\n\n gl.viewport(0, 0, renderParams.canvasWidth, renderParams.canvasHeight);\n gl.clearColor(1.0, 0.0, 0.0, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n\n // setup matrices. No head rotation\n const noseTipZ = globalShapeHomogeneous[4 * 2112 + 2];\n const modelBoxMinZ = 1.1 * noseTipZ;\n const modelBoxMaxZ = 0.0;\n const zBoxScale = modelBoxMaxZ - modelBoxMinZ;\n\n const headTrans = vec3.fromValues(0.0, 0.0, zHeadForDepthRender);\n const headMat = mat4.create();\n mat4.fromTranslation(headMat, headTrans);\n const scaleMat = mat4.create();\n mat4.fromScaling(scaleMat, [1.0, -1.0, -1.0]);\n mat4.mul(headMat, scaleMat, headMat);\n\n const headMVPMat = mat4.create();\n mat4.mul(headMVPMat, cameraMat, headMat);\n // render the head\n gl.enable(gl.CULL_FACE);\n gl.enable(gl.DEPTH_TEST);\n gl.depthFunc(gl.LEQUAL);\n gl.cullFace(gl.FRONT);\n gl.disable(gl.BLEND);\n\n gl.uniform1f(depthRenderer.uniforms.modelMinZ, modelBoxMinZ);\n gl.uniform1f(depthRenderer.uniforms.modelMaxZ, modelBoxMaxZ);\n\n // set the culling values to not cut the mesh\n gl.uniform1f(depthRenderer.uniforms.cullYmin, -Infinity);\n gl.uniform1f(depthRenderer.uniforms.cullYmax, Infinity);\n gl.uniform1f(depthRenderer.uniforms.cullXMin, -Infinity);\n\n gl.uniformMatrix4fv(depthRenderer.uniforms.matrix, false, headMVPMat);\n gl.enableVertexAttribArray(GLPrograms.ATTRIB_POS.position);\n gl.vertexAttribPointer(GLPrograms.ATTRIB_POS.position, 4, gl.FLOAT,\n false, 4 * 4, 0);\n gl.drawElements(gl.TRIANGLES, triangulation.length, gl.UNSIGNED_SHORT, 0);\n\n GlUtils.checkError(gl, 'after depth2RGBA render');\n // no need to disable anything since we're discarding everything after\n // this pass\n // get pixels and cleanup\n const canvasArea = renderParams.canvasWidth * renderParams.canvasHeight;\n const depthAsRGBA = new Uint8Array(4 * canvasArea);\n\n gl.readPixels(0, 0, renderParams.canvasWidth, renderParams.canvasHeight,\n gl.RGBA, gl.UNSIGNED_BYTE, depthAsRGBA);\n const t1 = performance.now();\n\n GlUtils.checkError(gl, 'after readPixels');\n // convert to float\n const depthFloat = new Float32Array(canvasArea);\n\n for (let k = 0; k < (4 * canvasArea); k += 4) {\n depthFloat[k / 4] = depthAsRGBA[k] * zBoxScale / 255.0;\n depthFloat[k / 4] += modelBoxMinZ;\n }\n const t2 = performance.now();\n\n return depthFloat;\n }\n}\n\nexport {\n DepthRenderer,\n};\n","export enum GlassesAssetType {\n B3D,\n GLTF,\n UNDEFINED\n}\n","import { mat3, mat4, vec3 } from 'gl-matrix';\nimport { GlRenderDebugOptions } from './Index';\nimport { RenderCanvasParameters } from './RenderDataUtils';\nimport { DepthRenderer } from './renderers/DepthRenderer';\n\nclass PushGlasses {\n public static pushGlassesTowardsFace(\n glassesVertex: Float32Array,\n gVertexStep: number,\n flare: number,\n referenceGlassesPoses: mat4[],\n shapeDepthRendered: Float32Array,\n cameraMat: mat4,\n glassesScale: number,\n zHeadForDepthRender: number,\n renderParams: RenderCanvasParameters,\n debug: GlRenderDebugOptions,\n ): vec3[] {\n const vertexCount = glassesVertex.length / gVertexStep;\n\n const corrections = new Array(referenceGlassesPoses.length);\n\n // project glasses vertices\n const zMin = Math.min(-flare, -30.0);\n for (let p = 0; p < referenceGlassesPoses.length; p++) {\n const transfMat = mat4.create();\n mat4.scale(transfMat, referenceGlassesPoses[p],\n [glassesScale, glassesScale, glassesScale]);\n const glassesSampling = new Int32Array(2 * vertexCount);\n const glassesZ = new Float32Array(vertexCount);\n const resultMV = vec3.create();\n const resultMVP = vec3.create();\n const input = vec3.create();\n let valid = 0;\n for (let k = 0; k < vertexCount; k++) {\n vec3.set(input, glassesVertex[gVertexStep * k],\n glassesVertex[gVertexStep * k + 1],\n glassesVertex[gVertexStep * k + 2]);\n if (input[2] > zMin) {\n vec3.transformMat4(resultMV, input, transfMat);\n glassesZ[valid] = resultMV[2];\n\n // displace and project\n resultMV[2] = -(resultMV[2] + zHeadForDepthRender);\n vec3.transformMat4(resultMVP, resultMV, cameraMat);\n glassesSampling[2 * valid] =\n Math.round(renderParams.canvasWidth * (resultMVP[0] + 1.0) / 2.0);\n glassesSampling[2 * valid + 1] =\n Math.round(renderParams.canvasHeight * (1.0 - resultMVP[1]) / 2.0);\n valid++;\n }\n }\n\n // sample the rendered depth and find minimum distance\n let minDistance = 1e5;\n for (let k = 0; k < valid; k++) {\n const x = 2 * k;\n const y = 2 * k + 1;\n const coord = glassesSampling[y] * renderParams.canvasWidth + glassesSampling[x];\n\n minDistance = Math.min(minDistance,\n (shapeDepthRendered[coord] - glassesZ[k]));\n\n if (p === 0 && debug.fittingVertices) {\n const debugVertexHTML = PushGlasses.drawDebugVertex(\n glassesSampling[x],\n glassesSampling[y],\n DepthRenderer.frontDepthDebugView);\n if (Math.abs(minDistance) > 16.0) {\n debugVertexHTML.style.border = '2px solid cyan';\n }\n }\n }\n\n // legacy, if someone understand what this means please contact the project owner\n if (Math.abs(minDistance) > 16.0) {\n minDistance = 0;\n }\n\n vec3.set(input, 0.0, 0.0, -minDistance);\n const rotMat = mat3.create();\n mat3.fromMat4(rotMat, referenceGlassesPoses[p]);\n mat3.transpose(rotMat, rotMat);\n const displacement = vec3.create();\n vec3.transformMat3(displacement, input, rotMat);\n corrections[p] = displacement;\n }\n return corrections;\n }\n\n public static pushGlassesTowardsNose(\n glassesVertex: Float32Array,\n gVertexStep: number,\n flare: number,\n referenceGlassesPoses: mat4[],\n shapeDepthRendered: Float32Array,\n cameraMat: mat4,\n glassesScale: number,\n zHeadForDepthRender: number,\n renderParams: RenderCanvasParameters,\n globalShapeHomogeneous: Float32Array,\n debug: GlRenderDebugOptions,\n ): vec3[] {\n const debugReferencePose = 1;\n const hitVerticesShowLenght = 99999999999;\n const hideNonHitVertex = false;\n const vertexCount = glassesVertex.length / gVertexStep;\n\n const corrections = new Array(referenceGlassesPoses.length);\n\n // project glasses vertices\n const zMin = Math.min(-flare, -30.0);\n for (let referencePose = 0; referencePose < referenceGlassesPoses.length; referencePose++) {\n const transfMat = mat4.create();\n mat4.scale(transfMat, referenceGlassesPoses[referencePose],\n [glassesScale, glassesScale, glassesScale]);\n const glassesSampling = new Int32Array(2 * vertexCount);\n const glassesY = new Float32Array(vertexCount);\n const vertexID = new Float32Array(vertexCount);\n const vertexValues: any[] = [vertexCount];\n const resultMV = vec3.create();\n const resultMVP = vec3.create();\n const input = vec3.create();\n let validIndex = 0;\n const noseTipZ = globalShapeHomogeneous[4 * 2112 + 2];\n\n for (let k = 0; k < vertexCount; k++) {\n\n // input = vertex\n vec3.set(input, glassesVertex[gVertexStep * k],\n glassesVertex[gVertexStep * k + 1],\n glassesVertex[gVertexStep * k + 2]);\n\n // check if the vertex is part of the frame\n if (input[2] > zMin) { // } && Math.abs(input[0]) < 10) {\n\n // transform vertex using nose positions\n vec3.transformMat4(resultMV, input, transfMat);\n\n // save local space height value\n glassesY[validIndex] = resultMV[1];\n vertexID[validIndex] = k;\n vertexValues[validIndex] = {\n x: resultMV[0],\n y: resultMV[1],\n z: resultMV[2]\n };\n\n const glassesDepthTrans = vec3.fromValues(0.0, noseTipZ, zHeadForDepthRender);\n const transformationMatrix = mat4.create();\n mat4.fromTranslation(transformationMatrix, glassesDepthTrans);\n const scaleMat = mat4.create();\n mat4.fromScaling(scaleMat, [1.0, 1.0, -1.0]);\n mat4.mul(transformationMatrix, scaleMat, transformationMatrix);\n // rotate the head t0 render it from top\n const rotation = 90 * Math.PI / 180.0;\n mat4.rotateX(transformationMatrix, transformationMatrix, rotation);\n const transformedVertex = vec3.fromValues(resultMV[0], resultMV[1], resultMV[2]);\n vec3.transformMat4(transformedVertex, transformedVertex, transformationMatrix);\n\n // calculate screen space position to sample depth buffer\n vec3.transformMat4(resultMVP, transformedVertex, cameraMat);\n glassesSampling[2 * validIndex] =\n Math.round(renderParams.canvasWidth * (resultMVP[0] + 1.0) / 2.0);\n glassesSampling[2 * validIndex + 1] =\n Math.round(renderParams.canvasHeight * (1.0 - resultMVP[1]) / 2.0);\n validIndex++;\n }\n }\n\n let minimumvertex = -1;\n const defaultMinDistance = 1e5;\n // sample the rendered depth and find minimum distance\n let minDistance = defaultMinDistance;\n const debugVertices = [];\n for (let k = 0; k < validIndex; k++) {\n const x = 2 * k;\n const y = 2 * k + 1;\n const coord = glassesSampling[y] * renderParams.canvasWidth + glassesSampling[x];\n const depthValue = shapeDepthRendered[coord];\n\n let debugVertexHTML;\n if (referencePose === debugReferencePose && debug.fittingVertices) {\n // draw a yellow vertex on top of depth map\n debugVertexHTML = PushGlasses.drawDebugVertex(\n glassesSampling[x],\n glassesSampling[y],\n DepthRenderer.topDepthDebugView);\n if (hideNonHitVertex) {\n debugVertexHTML.style.display = 'none';\n }\n }\n if (depthValue === DepthRenderer.topViewInfiniteValue) {\n continue;\n }\n\n const distance = (depthValue - glassesY[k]);\n if (distance < minDistance) {\n minDistance = distance;\n minimumvertex = vertexID[k];\n }\n\n // colorize the vertices that are actually hovering the user face\n if (referencePose === debugReferencePose && debug.fittingVertices) {\n debugVertexHTML.setAttribute('depthValue', depthValue);\n debugVertexHTML.setAttribute('distance', distance);\n debugVertexHTML.setAttribute('vertexIndex', vertexID[k]);\n debugVertexHTML.style.border = '2px solid cyan';\n debugVertexHTML.style.display = 'block';\n debugVertices.push(debugVertexHTML);\n }\n\n }\n\n // is possible to click on cyan vertices to check their distances\n if (referencePose === debugReferencePose && debug.fittingVertices) {\n debugVertices.sort((a, b) => {\n return parseFloat(a.getAttribute('distance')) - parseFloat(b.getAttribute('distance'));\n }).forEach((debugVertex: HTMLElement, id) => {\n // hide some vertices, the list ordered by distance, the closest is the first\n if (id > hitVerticesShowLenght) {\n debugVertex.style.display = 'none';\n } else {\n debugVertex.addEventListener('click', () => {\n const topDepthDebugView = document.getElementById(DepthRenderer.topDepthDebugView);\n // tslint:disable-next-line: max-line-length\n let distanceDebug: HTMLDivElement = topDepthDebugView.getElementsByClassName('distanceDebug')[0] as HTMLDivElement;\n if (!distanceDebug) {\n distanceDebug = document.createElement('div') as HTMLDivElement;\n distanceDebug.style.position = 'absolute';\n distanceDebug.style.left = '0px';\n distanceDebug.style.bottom = '0px';\n distanceDebug.style.color = 'white';\n distanceDebug.className = 'distanceDebug';\n topDepthDebugView.appendChild(distanceDebug);\n }\n distanceDebug.innerText = `ID:${debugVertex.getAttribute('vertexIndex')} _ vertex distance: ${debugVertex.getAttribute('distance')} _ min distance ${topDepthDebugView.getAttribute('minDistance')}`;\n });\n }\n });\n }\n\n // do not apply any offset, this to avoid falling into the void, sometimes happens with small noses\n if (minDistance === defaultMinDistance) {\n minDistance = 0;\n }\n\n // avoid glitches?\n if (Math.abs(minDistance) > 16.0) {\n minDistance = 0;\n }\n\n if (referencePose === debugReferencePose && debug.fittingVertices) {\n document.getElementById(DepthRenderer.topDepthDebugView).setAttribute('minDistance', minDistance.toString());\n }\n\n // apply matrix rotation to found offset\n const output = vec3.create();\n vec3.set(output, 0.0, -minDistance, 0.0);\n\n if (referencePose === debugReferencePose && debug.fittingVertices) {\n document.getElementById(DepthRenderer.topDepthDebugView).setAttribute('minDistance', minDistance.toString() + `_ output vec3 ${output}`);\n }\n const rotMat = mat3.create();\n mat3.fromMat4(rotMat, referenceGlassesPoses[referencePose]);\n mat3.transpose(rotMat, rotMat);\n const displacement = vec3.create();\n vec3.transformMat3(displacement, output, rotMat);\n corrections[referencePose] = displacement;\n\n // if (p === 0) debugger;\n }\n return corrections;\n }\n\n private static drawDebugVertex(x: number, y: number, viewId: string) {\n const debugVertexHTML = document.createElement('div');\n debugVertexHTML.style.position = 'absolute';\n debugVertexHTML.style.width = '2px';\n debugVertexHTML.style.height = '2px';\n debugVertexHTML.style.marginLeft = '-1px';\n debugVertexHTML.style.marginTop = '-1px';\n debugVertexHTML.style.borderRadius = '50%';\n debugVertexHTML.style.border = '2px solid yellow';\n debugVertexHTML.style.left = `${x}px`;\n debugVertexHTML.style.bottom = `${y}px`;\n try {\n document.getElementById(viewId).appendChild(debugVertexHTML);\n } catch (e) {\n console.error('Is not possible to draw debug vertices without a depthmap debug view in page.', e.message);\n }\n return debugVertexHTML;\n }\n}\n\nexport {\n PushGlasses,\n};\n","import { B3dAsset } from '@luxottica/vm-glasses';\nimport { GltfAsset } from './loaders/AssetLoader';\nimport { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { mat4, quat, vec3, vec4 } from 'gl-matrix';\nimport { name, version } from '../package.json';\nimport { FittingOffset } from './constants/FittingOffset';\nimport { FastFittingMode } from './FastFittingMode';\nimport { MILLIMETERS2METERS_SCALINGFACTOR } from './helpers/MathHelper';\nimport { GeometryData, MeasureCalculator, Measurements } from './measure-calculator/Index';\nimport { Glasses } from './objects/Glasses';\nimport { GlRenderDebugOptions } from './objects/GlRenderDebugOptions';\nimport { HeadPoses, getStandardHeadPose } from './objects/HeadPoses';\nimport { Point } from './objects/Point';\nimport { PupilData } from './objects/PupilData';\nimport { RenderFov} from './objects/RenderFov';\nimport { RenderVideoData } from './objects/RenderVideoData';\nimport { PushGlasses } from './PushGlasses';\nimport RenderDataUtils from './RenderDataUtils';\nimport { DepthRenderer } from './renderers/DepthRenderer';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'GeometryData');\n\nconst defaultFloatingNosepadOffset = [0, 2, -0.5];\n\nexport default class GeometryDataEngine {\n\n private frontalFrameno = 7; // 7 for videos, 0 for live data (mirror)\n private triangulation: Uint16Array;\n private headUVCoordinates: Float32Array;\n private fastFitting: FastFittingMode;\n\n private cameraAspectRatio: number = 480.0 / 640.0;\n private cameraFov: number;\n private renderFov: RenderFov;\n\n private deformationIndex: any[];\n private deformations: any[];\n // private headPoses: any[];\n private pupillaryDistance: number;\n private faceBreadth: number;\n private useFaceBreadth: boolean;\n private glassesScale: number;\n\n private shape: Float32Array;\n private globalShapeHomogeneous: Float32Array;\n\n private referenceGlassesPoses: mat4[];\n private glassesPoses: Float32Array[];\n\n private zHeadForDepthRender = 300.0;\n private readonly depthRenderParams = { canvasWidth: 480, canvasHeight: 640 };\n private shapeDepthRendered: Float32Array;\n private shapeTopDepthRendered: Float32Array;\n private pointNeighbours: number[][];\n\n private enableScaling = false;\n\n public glassesUPC: string;\n public videoId: string;\n public scaleGlassesOnly = true;\n\n public measureCalculator: MeasureCalculator = undefined;\n public oldPoseIndex: number;\n public get measurements() {\n return this.measureCalculator &&\n this.measureCalculator.measurements ||\n undefined;\n }\n public measurementsCallback: (measurements: Measurements) => void;\n\n constructor(meshTriangulation: any, headUV: any) {\n this.triangulation = new Uint16Array(meshTriangulation, 4);\n this.headUVCoordinates = RenderDataUtils.parseHeadUVData(headUV);\n this.pointNeighbours = RenderDataUtils.findPointNeighbours(\n GeometryData.expectedNumberOfVertices, this.triangulation);\n }\n\n public dispose(){\n this.headUVCoordinates = undefined;\n this.pointNeighbours = [];\n this.triangulation = undefined;\n }\n\n public getGlobalShapeHomogeneous() {\n return this.globalShapeHomogeneous;\n }\n\n public setVtoVideo(\n video: RenderVideoData,\n pupillaryDistance: number,\n enableScaling: boolean,\n debug: GlRenderDebugOptions,\n posesCountChanged: boolean,\n poseIndex: number,\n headPoses: HeadPoses,\n ): boolean {\n const singlePose = video.headPoses.length === 1;\n const poseIndexChanged = poseIndex !== this.oldPoseIndex;\n if (!this.videoId\n || this.videoId !== video.videoId\n || this.pupillaryDistance !== pupillaryDistance\n || this.enableScaling !== enableScaling\n || posesCountChanged\n || (singlePose && poseIndexChanged)) {\n this.oldPoseIndex = poseIndex;\n this.enableScaling = enableScaling;\n\n this.cameraFov = video.cameraFov;\n\n this.frontalFrameno = 7;\n this.shape = Float32Array.from(video.shape);\n if (this.measureCalculator === undefined) {\n this.measureCalculator = new MeasureCalculator(false);\n }\n this.measureCalculator.setHead(this.shape);\n this.deformations = video.deformations;\n this.deformationIndex = video.deformationIndex;\n\n this.initialize(pupillaryDistance, enableScaling, headPoses, debug, false);\n\n this.glassesPoses = undefined;\n this.videoId = video.videoId;\n return true;\n }\n return false;\n }\n\n public setMirrorVideo(\n video: RenderVideoData,\n faceMeasurement: number,\n imageSize: { width: number, height: number },\n enableScaling: boolean,\n headPoses: HeadPoses,\n debug: GlRenderDebugOptions,\n useFaceBreadth = true\n ): boolean {\n const needsSetup = !this.videoId || this.videoId !== video.videoId;\n const needsUpdate = needsSetup || this.renderFov.horizontal !== video.renderFov.horizontal\n || this.renderFov.vertical !== video.renderFov.vertical\n || useFaceBreadth != this.useFaceBreadth\n || (!useFaceBreadth && this.pupillaryDistance !== faceMeasurement)\n || (useFaceBreadth && this.faceBreadth !== faceMeasurement)\n || (this.depthRenderParams.canvasWidth !== imageSize.width)\n || (this.depthRenderParams.canvasHeight !== imageSize.height);\n\n if (needsSetup) { // no need to set the shape when the image size changes\n this.frontalFrameno = 0; // we only have one frame, so set to 0\n this.shape = video.shape;\n this.deformations = [];\n this.deformationIndex = [];\n if (this.measureCalculator === undefined) {\n this.measureCalculator = new MeasureCalculator(false);\n }\n this.measureCalculator.setHead(this.shape);\n }\n if (needsUpdate) {\n this.renderFov = video.renderFov;\n\n this.depthRenderParams.canvasWidth = imageSize.width;\n this.depthRenderParams.canvasHeight = imageSize.height;\n\n this.initialize(faceMeasurement, enableScaling, headPoses, debug, useFaceBreadth);\n\n this.glassesPoses = undefined;\n this.videoId = video.videoId;\n }\n if ((needsUpdate || needsSetup)) {\n this.callMeasurementsCallback();\n }\n return needsUpdate;\n }\n\n private callMeasurementsCallback() {\n if (this.measurementsCallback) {\n this.measurementsCallback(this.measureCalculator.measurements);\n }\n }\n\n public setGlasses(glasses: B3dAsset | GltfAsset): boolean {\n if (!this.videoId) { throw Error('VideoData must be set before glasses'); }\n\n return this.clearGlassesPoses(glasses);\n }\n\n public clearGlassesPoses(glasses: B3dAsset | GltfAsset): boolean {\n if (!this.glassesUPC || this.glassesUPC !== glasses.upc) {\n logger.debug('renderable glasses changed (old: {}, new: {})', this.glassesUPC, glasses.upc);\n this.glassesUPC = glasses.upc;\n\n this.glassesPoses = undefined; // this is needed to recompute poses, and thus push glasses\n\n return true;\n }\n return false;\n }\n\n public getShapeForFrame(frameno: number) {\n const deformations = this.deformations[frameno];\n const deformationIndex = this.deformationIndex[frameno];\n\n if (!deformations || deformations.length === 0) {\n return this.globalShapeHomogeneous;\n } else {\n const shapeForFrame = RenderDataUtils.diffuseDeformationRange(\n this.shape, deformations, deformationIndex,\n this.pointNeighbours, 10\n );\n return RenderDataUtils.addHomogenousCoordinate(shapeForFrame);\n }\n }\n\n public getHeadShape(frameno: number, scalingFactor = 1) {\n const shape = this.getShapeForFrame(frameno); // shape is the vertices in homogeneous coordinates (4 components)\n const shapeN = new Float32Array(3 / 4 * shape.length);\n for (let k = 0; k < shape.length / 4; k++) {\n shapeN[3 * k] = shape[4 * k] * scalingFactor;\n shapeN[3 * k + 1] = shape[4 * k + 1] * scalingFactor;\n shapeN[3 * k + 2] = shape[4 * k + 2] * scalingFactor;\n }\n return shapeN;\n }\n\n public getHeadUV(frameno: number) {\n const shape = this.getShapeForFrame(frameno); // shape is the vertices in homogeneous coordinates (4 components)\n\n const shapeUV = new Float32Array(shape.length / 2);\n for (let k = 0; k < shape.length / 4; k++) {\n shapeUV[2 * k] = this.headUVCoordinates[2 * k];\n shapeUV[2 * k + 1] = this.headUVCoordinates[2 * k + 1];\n }\n return shapeUV;\n }\n\n public getHeadTriangulation() {\n return this.triangulation;\n }\n\n public getEarZ(): number {\n return 0.5 * (this.measurements.position.ears.left[2] +\n this.measurements.position.ears.right[2]);\n }\n\n public getCameraMat(frameno: number, headPoses: HeadPoses, scalingFactor = 1): mat4 {\n const cameraMat = mat4.create();\n\n // TODO: refactor putting zhead as parameter (function's signature)\n const zhead: number = headPoses.getHeadPose(frameno)[5];\n\n if (this.renderFov) { // virtual mirror path\n mat4.perspectiveFromFieldOfView(cameraMat,\n {\n leftDegrees: this.renderFov.horizontal * 0.5 * 180.0 / Math.PI,\n rightDegrees: this.renderFov.horizontal * 0.5 * 180.0 / Math.PI,\n upDegrees: this.renderFov.vertical * 0.5 * 180.0 / Math.PI,\n downDegrees: this.renderFov.vertical * 0.5 * 180.0 / Math.PI\n },\n Math.max(10.0 * scalingFactor, (zhead - 300.0) * scalingFactor), zhead * 10000.0 * scalingFactor);\n } else { // vto path\n mat4.perspective(cameraMat, this.cameraFov, this.cameraAspectRatio,\n Math.max(10.0 * scalingFactor, (zhead - 300.0) * scalingFactor), zhead * 10000.0 * scalingFactor);\n }\n return cameraMat;\n }\n\n public getHeadMatrices(frameno: number, headPoses: HeadPoses, scalingFactor = 1, defaultPoses = false): {mvp: mat4, world: mat4} {\n const headPoseMat = this.getHeadWorldMatrix(frameno, headPoses, scalingFactor, defaultPoses);\n\n const cameraMat = this.getCameraMat(frameno, headPoses, scalingFactor);\n const headMVPMat = mat4.create();\n mat4.mul(headMVPMat, cameraMat, headPoseMat);\n\n return {\n mvp: headMVPMat,\n world: headPoseMat,\n };\n }\n\n public getHeadWorldMatrix(frameno: number, headPoses: HeadPoses, scalingFactor = 1, defaultPoses = false): mat4 {\n const headPose = Float32Array.from(defaultPoses ? getStandardHeadPose(frameno) : headPoses.getHeadPose(frameno));\n\n const scaleMat = mat4.create();\n const headPoseMat = mat4.create();\n\n mat4.scale(scaleMat, scaleMat, [1.0, 1.0, -1.0]);\n\n const headRot = vec3.fromValues(headPose[0], headPose[1], headPose[2]);\n const length = vec3.length(headRot);\n mat4.rotate(headPoseMat, headPoseMat, length, headRot);\n headPoseMat[12] = headPose[3] * scalingFactor;\n headPoseMat[13] = headPose[4] * scalingFactor;\n headPoseMat[14] = headPose[5] * scalingFactor;\n\n mat4.mul(headPoseMat, scaleMat, headPoseMat);\n\n return headPoseMat;\n }\n\n // computes the homogeneous shape, glasses scale and glasses reference poses\n private initialize(faceMeasurement: number, enableScaling: boolean, headPoses: HeadPoses, debug: GlRenderDebugOptions, useFaceBreadth = true) {\n this.useFaceBreadth = useFaceBreadth;\n if(useFaceBreadth)\n this.faceBreadth = faceMeasurement;\n else\n this.pupillaryDistance = faceMeasurement;\n this.glassesScale = !enableScaling ? 1.0 : \n (useFaceBreadth ? this.computeScaleFromFb(this.faceBreadth, debug) : this.computeScaleFromPd(this.pupillaryDistance, debug));\n if (!enableScaling) {\n logger.debug('Scaling is disabled, render engine will ignore any PD');\n } else {\n logger.warn('Using Scaling from PD');\n }\n\n this.globalShapeHomogeneous =\n RenderDataUtils.addHomogenousCoordinate(this.shape);\n\n if (this.shape.length / 3 !== GeometryData.expectedNumberOfVertices) {\n this.pointNeighbours =\n RenderDataUtils.findPointNeighbours(this.shape.length / 3,\n this.triangulation);\n }\n // render the depth\n this.zHeadForDepthRender = headPoses.getHeadPose(this.frontalFrameno)[5];\n this.shapeDepthRendered =\n DepthRenderer.renderFrontalShapeDepth(\n this.getCameraMat(this.frontalFrameno, headPoses),\n this.globalShapeHomogeneous,\n this.triangulation,\n this.zHeadForDepthRender,\n this.depthRenderParams,\n debug,\n );\n\n this.shapeTopDepthRendered =\n DepthRenderer.renderTopShapeDepth(\n this.getCameraMat(this.frontalFrameno, headPoses),\n this.globalShapeHomogeneous,\n this.triangulation,\n this.zHeadForDepthRender,\n this.depthRenderParams,\n debug,\n );\n\n this.referenceGlassesPoses =\n RenderDataUtils.calculateGlassesTransforms(\n this.shape, 20, FittingOffset.ksGlassesOffsetY, FittingOffset.ksGlassesOffsetZ);\n\n this.fastFitting = new FastFittingMode(this.shape, this.referenceGlassesPoses);\n }\n\n private computeScaleFromPd(\n pupillaryDistance: number,\n debug: GlRenderDebugOptions\n ): number {\n this.measureCalculator.setPD(pupillaryDistance, debug.showInspector);\n return this.measureCalculator.measurements.scale.glasses;\n }\n\n private computeScaleFromFb(\n faceBreadth: number,\n debug: GlRenderDebugOptions\n ): number {\n this.measureCalculator.setFB(faceBreadth, debug.showInspector);\n return this.measureCalculator.measurements.scale.glasses;\n }\n\n ///////////////// glasses-related calls\n\n public getGlassesPosesCount(): number {\n return this.referenceGlassesPoses.length;\n }\n\n public getGlassesScale(): number {\n return this.glassesScale;\n }\n\n public getGlassesTaper(): number {\n const earDistance = this.calcEarDistance();\n const taper = (earDistance / this.glassesScale - 130.0) * 0.5;\n return taper;\n }\n\n private poseVec6ToMat4(glassesPose: Float32Array): mat4 {\n const glassesPoseMat = mat4.create();\n\n const glassRot = vec3.fromValues(glassesPose[0], glassesPose[1], glassesPose[2]);\n const length = vec3.length(glassRot);\n mat4.fromRotation(glassesPoseMat, length, glassRot);\n\n glassesPoseMat[12] = glassesPose[3];\n glassesPoseMat[13] = glassesPose[4];\n glassesPoseMat[14] = glassesPose[5];\n return glassesPoseMat;\n }\n\n // TODO maybe a better naming is required, returns the glasses after all the offset,\n // the real glasses world position is calculated after multiplication of this matrix for head mvp\n public getGlassesWorldPosition(glasses: Glasses, noseIndex: number, headPoses: HeadPoses, debug: GlRenderDebugOptions) {\n return this.poseVec6ToMat4(this.getGlassesPoseAt(glasses, noseIndex, headPoses, debug));\n }\n\n public getGlassesMatrices(\n glasses: Glasses,\n frameno: number,\n noseIndex: number,\n glassesRotation: number,\n offsetY: number,\n offsetZ: number,\n headPoses: HeadPoses,\n debug: GlRenderDebugOptions,\n scalingFactor = 1,\n defaultPoses = false\n ): { mvp: mat4, world: mat4 } {\n\n const appliedOffset = [0, offsetY, offsetZ];\n let fittingNoseIndex = 0;\n // disable slide on nose when it's enabled fast fitting (fittingNoseIndex = 0)\n if (!glasses.useFastFittingMode()) {\n // calculate offset and nose index only in standard mode\n fittingNoseIndex = noseIndex;\n }\n\n // when it's enabled fast fitting floating nosepad offset is false\n if (glasses.shouldApplyFloatingNosepadOffset()) {\n appliedOffset[0] += defaultFloatingNosepadOffset[0];\n appliedOffset[1] += defaultFloatingNosepadOffset[1];\n appliedOffset[2] += defaultFloatingNosepadOffset[2];\n }\n\n const glassesPoseMat = this.getGlassesWorldPosition(glasses, fittingNoseIndex, headPoses, debug);\n\n glassesPoseMat[12] = (glassesPoseMat[12] + appliedOffset[0]) * scalingFactor;\n glassesPoseMat[13] = (glassesPoseMat[13] + appliedOffset[1]) * scalingFactor;\n glassesPoseMat[14] = (glassesPoseMat[14] + appliedOffset[2]) * scalingFactor;\n\n // compose with the rotation for this particular configuration\n mat4.rotate(glassesPoseMat, glassesPoseMat,\n glassesRotation, [1.0, 0.0, 0.0]);\n const headMatrices = this.getHeadMatrices(frameno, headPoses, scalingFactor, defaultPoses);\n\n const glassesWorld = mat4.create();\n mat4.mul(glassesWorld, headMatrices.world, glassesPoseMat);\n\n /* const invertY = mat4.create();\n mat4.mul(glassesWorld, glassesWorld, mat4.fromScaling(invertY, [1, -1, 1])); */\n\n const glassesMVPMat = mat4.create();\n mat4.mul(glassesMVPMat, headMatrices.mvp, glassesPoseMat);\n\n return {\n mvp: glassesMVPMat,\n world: glassesWorld,\n };\n }\n\n public getEyeCenterY(glasses: Glasses, headPoses: HeadPoses, debug: GlRenderDebugOptions): number {\n const glassesMatrices = this.getGlassesMatricesWrapper(glasses, this.frontalFrameno, 0, 0, 0, 0, headPoses, debug);\n // Nose bridge is at 0,0,0 in glasses space\n const vert = vec3.fromValues(0.0, 0.0, 0.0);\n vec3.transformMat4(vert, vert, glassesMatrices.mvp);\n return (vert[1] / 2.0 + 0.5);\n }\n\n public getFadeDistanceForGlassesAt( glasses: Glasses,\n position: number,\n delta: number,\n headPoses: HeadPoses,\n debug: GlRenderDebugOptions,\n ): number {\n if (typeof delta === 'undefined') { delta = 0.0; }\n const fadeLocation = vec4.fromValues(0.0, 0.0,\n this.getEarZ() - 20.0 + delta, 1.0);\n\n const glassesPoseMat = this.poseVec6ToMat4(this.getGlassesPoseAt(glasses, position, headPoses, debug));\n\n const glassesMatInv = mat4.create();\n mat4.invert(glassesMatInv, glassesPoseMat);\n const fadeLocGlasses = vec4.create();\n vec4.transformMat4(fadeLocGlasses, fadeLocation, glassesMatInv);\n\n const fadeDistance = -(fadeLocGlasses[2] / fadeLocGlasses[3]);\n return fadeDistance;\n }\n\n public setScaleGlassesOnly(value: boolean){\n this.scaleGlassesOnly = value;\n }\n\n private getHeadScale(){\n return this.scaleGlassesOnly ? 1 : this.glassesScale;\n }\n\n public getPaceDistance(): number{\n const pacePointVertex = 13013;\n return 2.0 * (Math.abs(this.shape[3 * pacePointVertex])) * this.getHeadScale();\n }\n\n private calcEarDistance(): number {\n const earContactPointVertex = 10874;\n return 2.0 * Math.abs(this.shape[3 * earContactPointVertex]) * this.getHeadScale();\n }\n\n private getGlassesPoseAt(glasses: Glasses, noseIndex: number, headPoses: HeadPoses, debug: GlRenderDebugOptions): Float32Array {\n if (!this.glassesPoses) {\n this.glassesPoses = this.calculateMeshSpecificPosesWrapper(glasses, headPoses, debug);\n }\n return new Float32Array(this.glassesPoses[noseIndex].buffer, 0);\n }\n\n public getFastFittingOrigin(offsetY = 0, offsetZ = 0) {\n return this.fastFitting.calculateFastFittingOrigin(MILLIMETERS2METERS_SCALINGFACTOR, offsetY, offsetZ);\n }\n\n public getGlassesMatricesWrapper(\n glasses: Glasses,\n frameno: number,\n noseIndex: number,\n glassesRotation: number,\n offsetY: number,\n offsetZ: number,\n headPoses: HeadPoses,\n debug: GlRenderDebugOptions,\n scalingFactor = 1,\n ): { mvp: mat4, world: mat4 } {\n\n if (glasses.useFastFittingMode()){\n return this.fastFitting.getGlassesMatrices(headPoses.getHeadPose(frameno), offsetY,offsetZ,scalingFactor);\n }\n\n return this.getGlassesMatrices(\n glasses, frameno,noseIndex,glassesRotation,offsetY,offsetZ,headPoses,debug,scalingFactor\n );\n }\n\n // function to choose if using the fast fitting computation or the normal fitting one\n private calculateMeshSpecificPosesWrapper(glasses: Glasses, headPoses: HeadPoses, debug: GlRenderDebugOptions): Float32Array[] {\n if (glasses.useFastFittingMode()) {\n return this.fastFitting.calculateMeshSpecificPoses();\n }\n\n return this.calculateMeshSpecificPoses(glasses, headPoses, debug);\n }\n\n private getAngleAxis(poseMat) {\n const quaternion = quat.create();\n const axisAngle = vec3.create();\n mat4.getRotation(quaternion, poseMat);\n const angle = quat.getAxisAngle(axisAngle, quaternion);\n\n vec3.scale(axisAngle, axisAngle, angle);\n return axisAngle;\n }\n\n private calculateMeshSpecificPoses(glasses: Glasses, headPoses: HeadPoses, debug: GlRenderDebugOptions): Float32Array[] {\n // compute glasses pose corrections\n const buffer = glasses.getGlassesGeometry().getAttribute('position').array;\n const updates = PushGlasses.pushGlassesTowardsFace(\n Float32Array.from(buffer),\n 3, glasses.getFlare(),\n this.referenceGlassesPoses, this.shapeDepthRendered,\n this.getCameraMat(this.frontalFrameno, headPoses), this.glassesScale,\n this.zHeadForDepthRender, this.depthRenderParams,\n debug);\n\n const posesTowardFace = new Array(updates.length);\n\n for (let k = 0; k < this.referenceGlassesPoses.length; k++) {\n const mat = this.referenceGlassesPoses[k];\n const angleAxis = this.getAngleAxis(mat);\n const pose = new Float32Array(6);\n pose[0] = angleAxis[0];\n pose[1] = angleAxis[1];\n pose[2] = angleAxis[2];\n pose[3] = mat[12] + updates[k][0];\n pose[4] = mat[13] + updates[k][1];\n pose[5] = mat[14] + updates[k][2];\n\n posesTowardFace[k] = pose;\n }\n\n const pushedMatrix: mat4[] = [];\n posesTowardFace.forEach((gPose) => {\n pushedMatrix.push(this.poseVec6ToMat4(gPose));\n });\n\n const updatePushTowardNose = PushGlasses.pushGlassesTowardsNose(\n Float32Array.from(buffer),\n 3, glasses.getFlare(),\n pushedMatrix, this.shapeTopDepthRendered,\n this.getCameraMat(this.frontalFrameno, headPoses), this.glassesScale,\n this.zHeadForDepthRender, this.depthRenderParams,\n this.globalShapeHomogeneous,\n debug);\n\n const posesTowardNose = new Array(updatePushTowardNose.length);\n\n for (let k = 0; k < pushedMatrix.length; k++) {\n const mat = pushedMatrix[k];\n const angleAxis = this.getAngleAxis(mat);\n const pose = new Float32Array(6);\n pose[0] = angleAxis[0];\n pose[1] = angleAxis[1];\n pose[2] = angleAxis[2];\n pose[3] = mat[12] + updatePushTowardNose[k][0];\n pose[4] = mat[13] + updatePushTowardNose[k][1];\n pose[5] = mat[14] + updatePushTowardNose[k][2];\n\n posesTowardNose[k] = pose;\n }\n /* const pushedMatrixTwo: mat4[] = [];\n posesTowardNose.forEach((posesTowardNose) => {\n pushedMatrixTwo.push(this.poseVec6ToMat4(posesTowardNose));\n }); */\n\n const basicRotation = RenderDataUtils.glassesDefaultRotation();\n const earPosition = vec3.fromValues(\n this.shape[3 * RenderDataUtils.earVtx],\n this.shape[3 * RenderDataUtils.earVtx + 1],\n this.shape[3 * RenderDataUtils.earVtx + 2]);\n const noseRoot = vec3.fromValues(this.shape[3 * RenderDataUtils.noseVtxRoot],\n this.shape[3 * RenderDataUtils.noseVtxRoot + 1],\n this.shape[3 * RenderDataUtils.noseVtxRoot + 2]);\n\n // transform matrix to [roll, yaw, pitch, x, y, z]\n const alignedPoses = posesTowardNose.map((pose) => {\n const position = vec3.fromValues(\n pose[3],\n pose[4] - FittingOffset.ksGlassesOffsetY, // check why these constants are fist added (GeometryDataUtils.calculateGlassesTransforms) and then subtracted\n pose[5] - FittingOffset.ksGlassesOffsetZ);\n const newRotationMatrix = RenderDataUtils.getRotationMatrixForGlasses(position, earPosition, noseRoot);\n const glassesMat = mat4.create();\n mat4.multiply(glassesMat, basicRotation, newRotationMatrix);\n const angleAxis = this.getAngleAxis(glassesMat);\n pose[0] = angleAxis[0];\n pose[1] = angleAxis[1];\n pose[2] = angleAxis[2];\n\n return pose;\n });\n // sort poses by y\n alignedPoses.sort((a, b) => {\n return a[4] - b[4];\n });\n // TODO recalculate noseindex poses\n // return this.referenceGlassesPoses;\n\n return alignedPoses;\n\n }\n\n public extractPupilPixels(\n poseIndex: number,\n cropOffset: {x: number, y: number},\n screenSpaceRatio: {width: number, height: number},\n canvas: HTMLCanvasElement,\n headPoses: HeadPoses,\n ): PupilData {\n const headMVP = this.getHeadMatrices(poseIndex, headPoses).mvp;\n\n const leftEye = this.measurements.position.pupils.left;\n const rightEye = this.measurements.position.pupils.right;\n\n const leftEyeScreen = vec4.create();\n const leftEyeVector = vec4.create();\n const leftEyeScreenNormalized = vec3.create();\n vec4.set(leftEyeVector,\n leftEye[0],\n leftEye[1],\n leftEye[2],\n 1.0);\n vec4.transformMat4(leftEyeScreen, leftEyeVector, headMVP);\n vec3.set(leftEyeScreenNormalized,\n leftEyeScreen[0] / leftEyeScreen[3],\n leftEyeScreen[1] / leftEyeScreen[3],\n leftEyeScreen[2] / leftEyeScreen[3]\n );\n const leftPositiveClipSpace = vec3.create();\n vec3.add(leftPositiveClipSpace, leftEyeScreenNormalized, [1.0, 1.0, 1.0]); // (clipSpace + 1) / 2\n vec3.div(leftPositiveClipSpace, leftPositiveClipSpace, [2.0, 2.0, 2.0]);\n\n const rightEyeScreen = vec4.create();\n const rightEyeVector = vec4.create();\n const rightEyeScreenNormalized = vec3.create();\n vec4.set(rightEyeVector,\n rightEye[0],\n rightEye[1],\n rightEye[2],\n 1.0);\n vec4.transformMat4(rightEyeScreen, rightEyeVector, headMVP);\n vec3.set(rightEyeScreenNormalized,\n rightEyeScreen[0] / rightEyeScreen[3],\n rightEyeScreen[1] / rightEyeScreen[3],\n rightEyeScreen[2] / rightEyeScreen[3]\n );\n const rightPositiveClipSpace = vec3.create();\n vec3.add(rightPositiveClipSpace, rightEyeScreenNormalized, [1.0, 1.0, 1.0]); // (clipSpace + 1) / 2\n vec3.div(rightPositiveClipSpace, rightPositiveClipSpace, [2.0, 2.0, 2.0]);\n // normally we would multiply the clipspace by screen size to obtain screen coordinates\n // -> screenSpace = positiveClipSpace * screenDimension\n // this is not the case because the antialiasing shader (blur_3) offset and crop the image\n // crop and offset logic values follow a logic written in GlRender.fillCanvas() method,\n // this happens only when crop is enabled\n // crop/offset logic is applied by shader math in blur_3.vert:\n // -> croppedCoord = (textureCoord * cropInfo.xy) + cropInfo.zw;\n // where cropInfo is a vector composed by:\n // -> cropInfo.xy = [screenRatio.width, screenRatio.height]\n // -> cropInfo.zw = [cropOffset.x, cropOffset.y]\n // we have to change above math from UV space to screenspace because we are shrinking the system\n // and not expanding it as in blur_3.vert, moreover there's a change in origins between these two spaces\n // this is the resulting formula\n // screenSpaceCoordinates = (clipSpace - cropOffset) * (1 / screenRatio) * screenSize\n return {\n detected: true,\n left: {\n x: ((leftPositiveClipSpace[0] - cropOffset.x) * (1 / screenSpaceRatio.width)) * canvas.width,\n y: ((leftPositiveClipSpace[1] - cropOffset.y) * (1 / screenSpaceRatio.height)) * canvas.height,\n },\n right: {\n x: ((rightPositiveClipSpace[0] - cropOffset.x) * (1 / screenSpaceRatio.width)) * canvas.width,\n y: ((rightPositiveClipSpace[1] - cropOffset.y) * (1 / screenSpaceRatio.height)) * canvas.height,\n }\n };\n }\n\n public extractMeshCenter(\n poseIndex: number,\n headPoses: HeadPoses,\n cropOffset: {x: number, y: number},\n screenSpaceRatio: {width: number, height: number},\n canvas: HTMLCanvasElement,\n ): Point {\n const headMVP = this.getHeadMatrices(poseIndex, headPoses).mvp;\n\n const meshScreen = vec4.create();\n const meshVector = vec4.create();\n const meshScreenNormalized = vec3.create();\n vec4.set(meshVector,\n 0,\n 0,\n 0,\n 1.0);\n vec4.transformMat4(meshScreen, meshVector, headMVP);\n vec3.set(meshScreenNormalized,\n meshScreen[0] / meshScreen[3],\n meshScreen[1] / meshScreen[3],\n meshScreen[2] / meshScreen[3]\n );\n const meshPositiveClipSpace = vec3.create();\n vec3.add(meshPositiveClipSpace, meshScreenNormalized, [1.0, 1.0, 1.0]); // (clipSpace + 1) / 2\n vec3.div(meshPositiveClipSpace, meshPositiveClipSpace, [2.0, 2.0, 2.0]);\n\n const meshCenter = {\n x: ((meshPositiveClipSpace[0] - cropOffset.x) * (1 / screenSpaceRatio.width)) * canvas.width,\n y: ((meshPositiveClipSpace[1] - cropOffset.y) * (1 / screenSpaceRatio.height)) * canvas.height,\n };\n return meshCenter;\n }\n\n public getHeadVertexAtIndex(index: number) {\n return this.fastFitting.getHeadVertexAtIndex(index);\n }\n}\n","export default \"data:image/jpeg;base64,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\"","export enum GlassesMaterials {\n B3D_TRANSITION_STATIC = 1,\n B3D_TRANSITION_MIRROR_DYNAMIC = 2,\n}\n","import px from '../../assets/def_VTO-VM/px.jpeg';\nimport nx from '../../assets/def_VTO-VM/nx.jpeg';\nimport py from '../../assets/def_VTO-VM/py.jpeg';\nimport ny from '../../assets/def_VTO-VM/ny.jpeg';\nimport pz from '../../assets/def_VTO-VM/pz.jpeg';\nimport nz from '../../assets/def_VTO-VM/nz.jpeg';\n\nconst cubeMap = [px, nx, py, ny, pz, nz];\n\nexport const transitionsMirrorMaterialRotation: number = Math.PI;\n\nexport {\n cubeMap,\n};\n","export default \"data:image/jpeg;base64,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\"","export default \"data:image/jpeg;base64,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\"","export default \"data:image/jpeg;base64,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\"","export default \"data:image/jpeg;base64,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IHl24PmyEHOAR05PTjHbg15x4r1nVydxgZY16BuSuQMFscJnI465HWuXh17Xr7VJBaRlncknbhTyrZG48Lwe/PHWvT7hTdad5N4ySTDqsedq5f1PPb86APPotBluLiOa5+/JuJAB4xx9fT0/GvWtTnkj+y28KHYfMwqjGcYPQfnWJaR+VIlzOMRDPPT27+9dN4hnW0+x3MKjBEuF568Dnv1oA5nxIWi2woCpkPbvjbj615zo9qqXkcTD5mzu/wC+Sa9l8SywTM93kOwxjB452j+leUaVbk3Yu5TjdnAHf5SO9AHoH2gvcC3jHTkkc8YzWnAyBwJGCrxuLHAAyO9RLHHEmQOT1qjBbzanfCHdshVvmwMk4YAjn2//AFGgD//Q/n/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAp8TbZEb0YGmUUAfrR+xxrwZIAGzkXZ+owuD+vpX7teArkTWakeiY/IV/N1+x/r/larFp3Ty4Jnzn+/wAdPbb19/z/AKIPhdeefYI2f4Y/5LQB9EwHKipzwaqWjZT8auN60AC06mrTqACiiigBy06kHSloAKKKKACiiigAoopQM0AOHSloooAKKKKACiiigAooooAKKKKAFAzT6KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpHem1JTCMUAJRRRQAUUUUAFFFFABRRRQAUUUUAFB6UUUAR0UrdaSgAooooAKRulLSHpQAyh+BTlqOU8UAcZr8m2Jj/AL38q/On9ovWCtnLboxHNuT+ZP1/lX6DeKZglpIT1CMR/Kvy4/aFu3aSa3/jDQKR780AfC9hpb6pqxOD5Su29sEgAZPbHp615l8U/F41CdPC+iuWt7ZyreWRhsrsI+Qcg5PU856dK9C8e61B4N8PSWUBH27UYickDK4KA43E/wB49FP4cV5X4E8Myapeya9q6ko2Jl3rwxYk55AXAx2BH04oA7TwX4cj0HThcXCg3cxYAdehIUfLn09T+Fe5eHdNTTbU31zgSNkH15xx69v/AK1Yeg6W2p3QupAREnQZyMqQfp/npXS37/2lcDS7fiJQGdgMgADI6YHX3oAbbyi6nOqXORboCEyQMtjHTJPc/wCeK52/vTf3LXD4CAYU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yKTkJK4HsDz/ADNeaFa67xdKZtWnY95GI9+grlGHFAGTcrngdwa5TVrkxL5MPLMduPwrq71vLjb1wa5Voi0rTP1J49qAKmm2QtFwTlicsevp7e1dPp0Avn82bi3jPG4YDH8f8+tYsET3cvlJxGOXb8sjt610qssiixsvljXkkevXqPw5oA1BILp9kfy26ZHHQn8PrWFPM+t3X2eNttjGMsQV+Zh2HX1HPtimXdybqT+ybA4CsGkcYIAHUck85x2/+vuaZZIqLAmRbxk5b1JOccD3oAt2lojxggbLdB8oGccflUrTNNJsiGBwOB0pbi43kW1uMDnFW4IUs7cyPgkZJ+tADYYorTDy43MQB+dY3iacGGNBzuHA/EVbhjkuZBc3APX5V9MH3rC14yvcRoo6qcD05oA2tGEk1pGSc8AcduBXUA7RisnRLdrSwSJ/vZLH8TWjNPDbr5s5wucdv6mgCSeaK3QyysBjt3NY6xy3Ugu7zGB91CuOD6gk0xXaU/bL3hQCVTdwADkHgAZpiXb30rJFkRqRjH/1vp60ASyrNfyLFGcIcZPr2PX6/WteG0W1iEMYycZNWLW3S0hAx85z+tTQhjPkjjqfzoAIEPlnd1q3piYYlunH9abuA3tjqas2/rjg0AbCHCxbevzYp9sDiFupO7+tU4PM3xljx81Wrd8NAP8AfoAq64VXRj68f+hiofApJkfj0/8AZ6drhVtKIHt/6EKl8BqBI/fp/J6APSHGB6VWuVUwEH0P8qmuWIbiqNwzeUc+hP6UAf/W/n/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK0tJmMN/C4/vr/6EKzakhbZKjDsw/nQB+/v7GeuC40WFS3P21s/+P/j/ACr9dPC82+xgOeqf4V+En7EfiJGt7azd/ne8ZlX1Vdwb24LD35r9w/BVwJNNtznqn9BQB6iv3RTqZGcqKfQAVJUdSUAFFFFABRRRQAo60+mr1p1ABRRRQAUUUUAFFFFABTx0po60+gAooooAKKKKACiiigAooooAKKKKACiinAUAAHrTqKKACiiigAooooAKKKKACiiigAppHpTqKAI6KeRmmEYoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAGt602pKjoAKKKKACiiigAooooAD0qO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\"","export default \"data:image/jpeg;base64,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\"","import { Box3, BoxGeometry, Euler, ExtrudeGeometry, InstancedMesh, InterleavedBuffer, InterleavedBufferAttribute, Matrix4, Mesh, MeshBasicMaterial, Object3D, Path, Shape, Sphere, Vector2, Vector3 } from 'three';\n\nexport const debugNamePrefix = 'LUX_DEBUG_Xo6487ya';\n\nexport const getObjectVertices = (obj: Object3D): Array => {\n const pts: Array = [];\n const mesh = (obj as Mesh)\n const geo = mesh.geometry;\n if (geo) {\n let stride = 3;\n if(geo.attributes.position.hasOwnProperty('data')) {\n stride = (geo.attributes.position as InterleavedBufferAttribute).data.stride;\n }\n\n const positions = geo.attributes.position.array;\n const ptCount = positions.length / stride;\n for (let i = 0; i < ptCount; i++) {\n const p = new Vector3(positions[i * stride], positions[i * stride + 1], positions[i * stride + 2]);\n pts.push(mesh.localToWorld(p));\n }\n }\n return pts;\n};\n\nexport function computeWorldBounds(\n sceneObject,\n recomputeMeshes = true,\n considerNonVisible = true\n) {\n const bb = new Box3();\n\n sceneObject.updateMatrixWorld(false);\n\n if (sceneObject.visible || considerNonVisible) {\n if (sceneObject instanceof Mesh) {\n if (sceneObject.geometry.boundingBox === null || recomputeMeshes) {\n sceneObject.geometry.computeBoundingBox();\n }\n\n bb.copy(sceneObject.geometry.boundingBox);\n bb.applyMatrix4(sceneObject.matrixWorld);\n }\n\n const children = sceneObject.children;\n\n for (const c of children) {\n computeWorldBounds(c, recomputeMeshes, considerNonVisible);\n bb.union(c.boundingBox);\n }\n }\n\n sceneObject.boundingBox = bb;\n sceneObject.boundingSphere = new Sphere();\n sceneObject.boundingBox.getBoundingSphere(sceneObject.boundingSphere);\n}\n\nfunction createFrame(radX: number, radY: number, width: number, depth: number): Mesh {\n\n const shape = new Shape([\n new Vector2(-radX - width, -radY - width),\n new Vector2(-radX - width, radY + width),\n new Vector2(radX + width, radY + width),\n new Vector2(radX + width, -radY - width)\n\n ]);\n\n const hole = new Path([\n new Vector2(-radX, -radY),\n new Vector2(radX, -radY),\n new Vector2(radX, radY),\n new Vector2(-radX, radY)\n ]);\n shape.holes.push(hole);\n const extrudeSettings = { depth, bevelEnabled: true, bevelSegments: 2, steps: 2, bevelSize: 0, bevelThickness: 0 };\n const geometry = new ExtrudeGeometry(shape, extrudeSettings);\n\n const mesh = new Mesh(geometry, new MeshBasicMaterial({color: 0xFF0000, opacity: 0.5, transparent: true}));\n return mesh;\n}\n\nexport function parseLensBBGltfScene(gltf: GLTF, width = 0.5, depth = 0.2) : Array<{mesh: Mesh, originalPos: Vector3, originalRot: Euler}> {\n const additionalGlassesMeshes = new Array<{mesh: Mesh, originalPos: Vector3, originalRot: Euler}>();\n for (const object of gltf.scene.children) {\n const mesh = object as Mesh;\n if (!mesh) { continue; }\n\n mesh.geometry.computeBoundingBox();\n const rad = mesh.scale.divideScalar(2);\n const quad = createFrame(rad.x, rad.z, width, depth);\n quad.name = mesh.name;\n additionalGlassesMeshes.push({mesh: quad, originalPos: new Vector3().copy(mesh.position), originalRot: new Euler().copy(mesh.rotation)});\n }\n return additionalGlassesMeshes;\n}\n\nexport const debugPoints = (pointArray: Array, scene, radius = 0.00025, drawOnTop = false) => {\n const geometry = new BoxGeometry( radius*2, radius*2, radius*2 );\n const material = new MeshBasicMaterial( {color: 0x00ff00} ); \n const iMesh = new InstancedMesh(geometry, material, pointArray.length);\n for(let p = 0; p < pointArray.length; p++){\n iMesh.setMatrixAt(p, new Matrix4().setPosition(pointArray[p]));\n }\n iMesh.name = debugNamePrefix + '_points';\n if(drawOnTop){\n iMesh.renderOrder = 999;\n iMesh.material.depthTest = false;\n iMesh.material.depthWrite = false;\n }\n scene.add(iMesh);\n};\n\nexport function parseLandmarksGltfScene(gltf: GLTF, boxSize = new Vector3(2, 2, 2)) : Map {\n const colorMap = (nameEnd): number => {\n if (nameEnd === '_L') { return 0xFF00FF; } else if (nameEnd === '_R') { return 0x00FF00; } else { return 0xFFFFFF; }\n };\n const landmarks = new Map();\n for (const mark of gltf.scene.children[0].children) {\n const m = new Mesh(new BoxGeometry(boxSize.x, boxSize.y, boxSize.z), new MeshBasicMaterial({color: colorMap(mark.name.slice(-2))}));\n m.name = mark.name;\n landmarks.set(mark.name, {mesh: m, originalPos: mark.position});\n }\n return landmarks;\n}\n","import { DataTexture, RGBAFormat, Color } from 'three';\n\nexport function generateFlatTexture(\n color: Color,\n width: number,\n height: number\n) {\n const size = width * height;\n const data = new Uint8Array(4 * size);\n\n const r = Math.floor(color.r * 255);\n const g = Math.floor(color.g * 255);\n const b = Math.floor(color.b * 255);\n\n for (let i = 0; i < size; i++) {\n const stride = i * 4;\n\n data[stride] = r;\n data[stride + 1] = g;\n data[stride + 2] = b;\n data[stride + 3] = 255;\n }\n\n // used the buffer to create a DataTexture\n const texture = new DataTexture(data, width, height, RGBAFormat);\n texture.needsUpdate = true;\n return texture;\n}\n","export enum LensesType {\n INTEGRATED, // we use whatever is in the asset\n TRANSITION_MIRROR, // we use a transition mirror material with provided parameters\n IRIDESCENT, // we use an iridescent material\n GRADIENT, // we use a gradient material with provided parameters\n}\n\n// radians\nexport const transitionsMirrorMaterialRotation: number = Math.PI;\n","\nimport {\n Object3D, Texture\n} from 'three';\nimport { GlassesAssetType } from '../constants/GlassesAssetType';\nimport { GLTFGlasses } from './GLTFGlasses';\n\n\nexport class GlassesSceneData {\n\n public sceneObject: Object3D;\n public assetType: GlassesAssetType;\n public shadowMap: Texture;\n public upc: string;\n public shouldApplyfloatingNosepadOffset: boolean;\n public fastFittingMode: boolean;\n public gltfObject?: GLTFGlasses;\n\n constructor(upc: string, sceneObject: Object3D, assetType: GlassesAssetType, shadowMap: Texture,\n shouldApplyfloatingNosepadOffset: boolean, fastFittingMode: boolean, gltfObject?: GLTFGlasses) {\n this.sceneObject = sceneObject;\n this.assetType = assetType;\n this.shadowMap = shadowMap;\n this.upc = upc;\n this.shouldApplyfloatingNosepadOffset = shouldApplyfloatingNosepadOffset;\n this.fastFittingMode = fastFittingMode;\n this.gltfObject = gltfObject;\n }\n\n}\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\nfunction computeTangents() {\n\n\tthrow new Error( 'BufferGeometryUtils: computeTangents renamed to computeMikkTSpaceTangents.' );\n\n}\n\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.getCount() * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.getCount(); i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * @param {Array} geometries\n * @param {Boolean} useGroups\n * @return {BufferGeometry}\n */\nfunction mergeBufferGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeBufferAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n\t\tif ( numMorphTargets === 0 ) break;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeBufferAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * @param {Array} attributes\n * @return {BufferAttribute}\n */\nfunction mergeBufferAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tarray.set( attributes[ i ].array, offset );\n\n\t\toffset += attributes[ i ].array.length;\n\n\t}\n\n\treturn new BufferAttribute( array, itemSize, normalized );\n\n}\n\n/**\n * @param {BufferAttribute}\n * @return {BufferAttribute}\n */\nexport function deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * @param {Array} attributes\n * @return {Array}\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n// returns a new, non-interleaved version of the provided attribute\nexport function deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n// deinterleaves all attributes on the geometry\nexport function deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Array} geometry\n * @return {number}\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} tolerance\n * @return {BufferGeometry}\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new BufferAttribute(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttr = geometry.morphAttributes[ name ];\n\t\tif ( morphAttr ) {\n\n\t\t\ttmpMorphAttributes[ name ] = new BufferAttribute(\n\t\t\t\tnew morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize ),\n\t\t\t\tmorphAttr.itemSize,\n\t\t\t\tmorphAttr.normalized\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst decimalShift = Math.log10( 1 / tolerance );\n\tconst shiftMultiplier = Math.pow( 10, decimalShift );\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * shiftMultiplier ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttr = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newarray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewarray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttr ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttr.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttr[ m ][ getterFunc ]( index ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new BufferAttribute(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new BufferAttribute(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n * Helpful for Raytracing or Decals.\n * @param {Mesh | Line | Points} object An instance of Mesh, Line or Points.\n * @return {Object} An Object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tif ( object.geometry.isBufferGeometry !== true ) {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils: Geometry is not of type BufferGeometry.' );\n\t\treturn null;\n\n\t}\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.boneTransform( a, _vA );\n\t\t\tobject.boneTransform( b, _vB );\n\t\t\tobject.boneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.position;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\nexport {\n\tcomputeTangents,\n\tcomputeMikkTSpaceTangents,\n\tmergeBufferGeometries,\n\tmergeBufferAttributes,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups\n};\n","import { GltfAsset } from '../loaders/AssetLoader';\nimport {\n FeatureMaterialBuilder,\n GLTFLensesManager, LensDescription,\n} from '@luxottica/vm-renderer-core';\nimport {\n Box3,\n BufferGeometry,\n CubeTexture,\n Euler,\n Matrix3,\n Matrix4,\n Mesh,\n MeshStandardMaterial,\n NormalBlending,\n Object3D, Quaternion, Texture,\n Vector3,\n} from 'three';\nimport { mergeBufferGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils';\nimport { transitionsMirrorMaterialRotation } from '../constants/LensesType';\nimport { computeWorldBounds, parseLandmarksGltfScene, parseLensBBGltfScene, debugNamePrefix, getObjectVertices } from '../helpers/GeometryHelper';\nimport { MILLIMETERS2METERS_SCALINGFACTOR } from '../helpers/MathHelper';\nimport { AssetLoader } from '../loaders/AssetLoader';\n\nimport { GlRenderDebugOptions } from './GlRenderDebugOptions';\nimport { GlassesLoadingCallbacks } from './GlRenderOptions';\nimport { GlassesGLTFFormats, parseGLTFGlasses, GLTFGlasses as RTGLTFGlasses } from '@luxottica/glasses-rt-webglrenderer';\n\nenum NosepadTypes {\n INTEGRATED = 'integrated',\n FLOATING = 'floating',\n}\n\nenum FittingTypes {\n STANDARD = 'standard',\n FAST = 'fast'\n}\n\nconst maxBendAmount = 0.015;\nconst bendDistance = -0.01;\n\nconst EXTRAS_GRP = 'Extras_GRP';\n\n// mm default value for gltf flare\nconst defaultGltfFlare = 19.0;\n\nexport interface IGLFTGeometryCallbacks {\n getFastFittingOrigin: (offsetY: number, offsetZ: number)=>Vector3,\n getPaceDistance: ()=>number,\n getGlassesTaper: ()=>number,\n getGlassesScale: ()=>number\n}\n\ninterface ISetParameters {\n taper: number;\n scale: number;\n fadePositionZ: number;\n enableFade: boolean;\n}\n\nexport class GLTFGlasses {\n\n public hasLandmarks = false;\n private hasMisc = false;\n protected glasses: GltfAsset;\n protected debug: GlRenderDebugOptions;\n protected callbacks?: GlassesLoadingCallbacks;\n\n protected flare: number;\n protected applyNosepadOffset: boolean;\n protected gltfScene: Object3D;\n protected templeGroups: Object3D[] = [];\n protected featureBuilder: FeatureMaterialBuilder;\n protected fittingGeometry: BufferGeometry;\n protected assetLoader: AssetLoader;\n protected cubeEnvMap: CubeTexture;\n protected headShadowMap: any;\n protected headWorldMatrix: Matrix4;\n protected geometryCallbacks: IGLFTGeometryCallbacks;\n\n protected lensesManager: GLTFLensesManager;\n \n protected glassesHaveOneLens = false;\n private isFastFittingMode: boolean;\n private fittingOrigin: Vector3;\n private internalTempleDistance: number;\n private glassesData: RTGLTFGlasses;\n\n constructor(cubeMap: CubeTexture, assetLoader: AssetLoader, geometryCallbacks: IGLFTGeometryCallbacks) {\n this.geometryCallbacks = geometryCallbacks;\n this.assetLoader = assetLoader;\n this.featureBuilder = new FeatureMaterialBuilder();\n this.headWorldMatrix = new Matrix4().identity();\n this.cubeEnvMap = cubeMap;\n\n this.lensesManager = new GLTFLensesManager();\n \n }\n\n public set(glasses: GltfAsset, debug: GlRenderDebugOptions) {\n this.glasses = glasses;\n this.debug = debug;\n\n const gltfGlasses = this.glasses as GltfAsset;\n\n this.flare = this.glasses.flare ?? defaultGltfFlare;\n // use nosepad type offset to fit glasses\n this.applyNosepadOffset = gltfGlasses.nosepadType === NosepadTypes.FLOATING;\n this.isFastFittingMode = glasses.fitting === FittingTypes.FAST;\n\n // rosetta workflow\n this.updateFastFittingOrigin();\n\n if (!this.isFastFittingMode) {\n const fittingLOD = glasses.gltfLod[1] ? glasses.gltfLod[1] : glasses.gltfLod[0]; // we use LOD0 if LOD1 is not present\n this.processFittingGeometry(fittingLOD);\n }\n\n const format: GlassesGLTFFormats = this.isFastFittingMode ? GlassesGLTFFormats.thirdParties : undefined;\n\n this.glassesData = parseGLTFGlasses(glasses.gltfLod[0].scene, format);\n this.lensesManager.setGlasses(this.glassesData);\n this.gltfScene = this.glassesData.gltf;\n this.processParsedGLTFGlasses(this.glassesData);\n \n this.hasMisc = glasses.misc !== undefined;\n const scale = new Matrix4().scale(this.gltfScene.children[0].scale).invert();\n if (glasses.misc) {\n if (glasses.misc.bounds) {\n for (const bb of parseLensBBGltfScene(glasses.misc.bounds, 0.004, 0.001)) {\n this.gltfScene.getObjectByName('Root_Glasses_GRP').add(bb.mesh);\n bb.mesh.scale.applyMatrix4(scale);\n bb.mesh.position.copy(bb.originalPos.applyMatrix4(scale));\n const original = new Quaternion().setFromEuler(bb.originalRot);\n const offsetRotation = new Quaternion().setFromEuler(new Euler(Math.PI / 2, 0, 0));\n original.multiply(offsetRotation);\n bb.mesh.rotation.setFromQuaternion(original);\n bb.mesh.renderOrder = -1;\n }\n }\n if (glasses.misc.landmarks) {\n this.hasLandmarks = true;\n for (const lm of parseLandmarksGltfScene(glasses.misc.landmarks, new Vector3(0.5, 0.5, 0.5)).values()) {\n lm.mesh.position.copy(lm.originalPos.applyMatrix4(scale));\n this.gltfScene.getObjectByName('Root_Glasses_GRP').add(lm.mesh);\n }\n }\n }\n this.lensesManager.setEnvironmentMap(this.cubeEnvMap, 2.0, new Matrix3().setFromMatrix4(new Matrix4().makeRotationY(transitionsMirrorMaterialRotation)));\n return this.gltfScene;\n }\n\n public updateCubeEnvMap(cubeMap: CubeTexture) {\n this.lensesManager.setEnvironmentMap(cubeMap);\n }\n\n public setLinearTosRGBIridescence(value: boolean){\n this.lensesManager.setsRGBToLinearIridescentLenses(value);\n }\n\n public getFlare(scaleFactor = 1) {\n if (this.flare === defaultGltfFlare) {\n return this.flare * scaleFactor;\n } // flare for asset 805289005612\n return this.flare;\n }\n\n public getHeadShadowMap(): Texture {\n return this.headShadowMap;\n }\n\n public getApplyNosepadOffset() {\n return this.applyNosepadOffset;\n }\n\n public getFittingGeometry(): BufferGeometry {\n return this.fittingGeometry;\n }\n\n public useFastFittingMode(): boolean {\n return this.isFastFittingMode;\n }\n\n public updateHeadWorldMatrix(headWorldMatrix: Matrix4){\n this.headWorldMatrix.copy(headWorldMatrix);\n }\n\n public setTransform(worldMatrix: Matrix4) {\n this.gltfScene.matrixAutoUpdate = false;\n if(this.isFastFittingMode){\n const centerOffset = this.fittingOrigin.clone().applyMatrix4(this.headWorldMatrix);\n worldMatrix.setPosition(centerOffset);\n this.gltfScene.matrix.copy(worldMatrix);\n }\n else{\n this.gltfScene.matrix.copy(worldMatrix);\n }\n }\n\n public setsRGBToLinearTransitionsLenses(value: boolean) {\n this.lensesManager.setsRGBToLinearTransitionsLenses(value);\n }\n\n public setLenses(lensDescription: any) {\n this.lensesManager.setLenses(lensDescription);\n }\n\n public setMaterials(param: ISetParameters, lensDescription: LensDescription, statesInterpolation: number, cameraToglasses: Matrix4) {\n\n // disable updating bending and fading if fast fitting mode is enabled on the asset\n\n this.templeGroups.forEach((grp: Object3D) => {\n grp.traverse((o) => {\n if ('material' in o) {\n const mesh = o as Mesh;\n const material = mesh.material as MeshStandardMaterial;\n\n // featureBuilder has just built chunk replacer and uniforms list\n // we avoid resetState to not clean up uniform list\n // fadePositionZ is passed in meter scale directly\n // Inspector.addLine(fadePositionZ, \"fadePosition\")\n\n const threeM = this.gltfScene.matrix;\n const inv = threeM.clone().invert();\n\n this.featureBuilder.setMaterial(material, false);\n\n const flare = this.getFlare(MILLIMETERS2METERS_SCALINGFACTOR);\n\n // update taper uniforms\n this.featureBuilder.setTaperUniforms({\n flare: flare,\n scale: param.scale,\n taper: param.taper,\n unitScaleFactor: MILLIMETERS2METERS_SCALINGFACTOR,\n worldToRestMatrix: inv,\n invWorldToRestMatrix: threeM,\n });\n const bendAmount = this.getBendAmount();\n this.featureBuilder.setBendingUniforms(\n bendAmount,\n bendDistance,\n inv,\n threeM,\n );\n\n // update fade uniforms\n this.featureBuilder.setFadeUniforms({\n fadePositionZ: param.fadePositionZ,\n enableFade: true,\n unitScaleFactor: MILLIMETERS2METERS_SCALINGFACTOR,\n worldToRestMatrix: inv,\n });\n }\n });\n });\n\n this.lensesManager.setLenses(lensDescription);\n this.lensesManager.computeAndSetLensParameters(lensDescription, statesInterpolation, { envMapIntensity: 2.0 });\n this.lensesManager.onBeforeRenderLenses(undefined, cameraToglasses);\n \n }\n\n public setCubeEnvMap(cubeEnvMap: CubeTexture) {\n this.cubeEnvMap = cubeEnvMap;\n }\n\n public getAABB() {\n return this.glassesData.boundingBox;\n }\n\n public getGlassesData() {\n return this.glassesData;\n }\n\n public updateFastFittingOrigin(offsetY = 0, offsetZ = 0) {\n this.fittingOrigin = this.geometryCallbacks.getFastFittingOrigin(offsetY, offsetZ);\n }\n\n private findExternalTempleDistance(obj: Object3D) {\n //DO NOT REMOVE the following line is required for the algorithm to work\n //probably for some cleanup operations performed on the meshes\n const bbox = new Box3().setFromObject(this.gltfScene);\n\n //taking a band of vertices belonging to the glasses, near\n //the pace point of the mesh face\n let vArray = new Array();\n obj.traverse((o) => {\n vArray = vArray.concat(getObjectVertices(o).filter((p)=>{\n return p.z > bendDistance*4 - 0.005 && p.z < bendDistance*4 + 0.005;\n }));\n });\n\n //debugPoints(vArray, this.gltfScene, 0.005, true);\n //computing the point which is the most internal one\n this.internalTempleDistance = Math.min(...vArray.map((p: Vector3) => Math.abs(p.x))) * 2;\n }\n\n private processParsedGLTFGlasses(glassesData: RTGLTFGlasses){\n this.gltfScene = glassesData.gltf;\n this.findExternalTempleDistance(this.gltfScene);\n const templeMeshL = this.glassesData.groups.templeL;\n const templeMeshR = this.glassesData.groups.templeL;\n if (templeMeshL) {\n this.addMaterialFeatures(templeMeshL);\n this.templeGroups.push(templeMeshL);\n }\n\n if (templeMeshR) {\n this.addMaterialFeatures(templeMeshR);\n this.templeGroups.push(templeMeshR);\n }\n\n if (!(templeMeshL && templeMeshR)) {\n this.addMaterialFeatures(this.gltfScene);\n this.templeGroups.push(this.gltfScene);\n }\n\n this.headShadowMap = undefined;\n if (glassesData.headShadowMap) {\n this.headShadowMap = glassesData.headShadowMap;\n this.headShadowMap.name = this.glasses.upc + ' shadow';\n this.headShadowMap.needsUpdate = true;\n } \n \n return this.gltfScene;\n }\n\n\n private processFittingGeometry(fittingLOD: GLTF) {\n // IMPORTANT, this needs to be done before merging the geometries\n // we need to explicit remove extra grp\n this.removeExtrasGRP(fittingLOD.scene);\n computeWorldBounds(fittingLOD.scene, true);\n\n this.fittingGeometry = this.mergeGeometry(fittingLOD.scene);\n // because the fitting algorithm reasons in mm\n this.fittingGeometry.scale(1000, 1000, 1000);\n }\n\n private mergeGeometry(gltfModel: Object3D): BufferGeometry {\n let mergedGeometry: BufferGeometry;\n let first = true;\n gltfModel.traverse((child) => {\n if ('geometry' in child) {\n const m = child as Mesh;\n m.updateMatrixWorld(true);\n // console.log(m.name);\n // console.log(m.matrixWorld);\n if (first) {\n mergedGeometry = m.geometry.clone();\n mergedGeometry.applyMatrix4(m.matrixWorld);\n first = false;\n } else {\n const newGeometry = m.geometry.clone();\n newGeometry.applyMatrix4(m.matrixWorld);\n const errorLoggingGeometry = mergedGeometry.clone();\n mergedGeometry = mergeBufferGeometries([mergedGeometry, newGeometry]);\n if(!mergedGeometry){\n throw new Error(`failed to merge lod2 geometries.\n Possible cause: a difference in the geometries attribute types (which should be identical). Listing the attributes found:\n target geometry name:${errorLoggingGeometry.name}\n target attribute list: ${Object.keys(errorLoggingGeometry.attributes)}\n current geometry name:${newGeometry.name}\n current attribute list: ${Object.keys(newGeometry.attributes)}` );\n }\n }\n }\n });\n return mergedGeometry;\n }\n\n \n\n private getBendAmount(){\n const paceDistance = this.geometryCallbacks.getPaceDistance();\n let bendAmount = 0.65 * (paceDistance/1000.0 - this.internalTempleDistance); //0.65 instead of 0.5 for some tollerance\n bendAmount = Math.max(0.0, bendAmount);\n return Math.min(maxBendAmount, bendAmount);\n }\n // Rework materials\n private addMaterialFeatures(obj: Object3D) {\n obj.traverse((o) => {\n if(o.name.includes(debugNamePrefix))\n return;\n if ('material' in o) {\n const mesh = o as Mesh;\n let material = mesh.material as MeshStandardMaterial;\n\n const threeM = this.gltfScene.matrix;\n const inv = threeM.clone().invert();\n // set on builder material need to be compiled with features\n this.featureBuilder.setMaterial(material);\n\n // tell to builder to add tapering and fading features on material\n // compile material with additional features\n\n let featureBuilder = this.featureBuilder;\n const taper = this.geometryCallbacks.getGlassesTaper();\n\n featureBuilder.addTapering({\n flare: this.getFlare(),\n taper: this.hasMisc ? 0.0 : taper,\n scale: this.geometryCallbacks.getGlassesScale(),\n unitScaleFactor: 0.001,\n worldToRestMatrix: inv,\n invWorldToRestMatrix: threeM,\n });\n\n const bendAmount = this.getBendAmount();\n featureBuilder.addBending(\n bendAmount,\n bendDistance,\n inv,\n threeM\n );\n\n featureBuilder = featureBuilder\n .addDitheringFading({\n fadePositionZ: 1,\n enableFade: true,\n unitScaleFactor: 0.001,\n worldToRestMatrix: inv,\n });\n\n material = this.featureBuilder.compileMaterial();\n\n // configure material to manage fading\n //material.transparent = true;\n // material.opacity = 1; // force opacity to fix some glasses\n material.blending = NormalBlending;\n // configure material defines\n material.defines = {\n ...{\n TAPERING: 1,\n BENDING: this.glasses.gltfLod.length < 2 ? 1 : 0,\n FADE: 1,\n },\n ...material.defines,\n };\n\n mesh.material = material;\n }\n });\n }\n\n private removeExtrasGRP(obj: Object3D) {\n const extrasGRP = obj.getObjectByName(EXTRAS_GRP);\n if (extrasGRP !== undefined) {\n extrasGRP.removeFromParent();\n }\n }\n}\n","import {\n B3dAsset\n} from '@luxottica/vm-glasses';\nimport {\n RemoteLogConfig\n} from '@luxottica/vm-remotelog';\nimport {\n B3DFactory,\n B3DMesh,\n B3DMeshMaterialState,\n GlassesB3DGeometry, GlassesB3DTransitionMirrorSRP, IScriptableRenderingPipeline, LensStandardTransitionMirrorSRP,\n computeLensParameters, LensDescription, getLensType, LensTypes\n} from '@luxottica/vm-renderer-core';\nimport { mat4 } from 'gl-matrix';\nimport {\n AxesHelper, BufferGeometry,\n CanvasTexture,\n ClampToEdgeWrapping,\n Color,\n CubeTexture,\n Euler, LinearFilter,\n Matrix3,\n Matrix4,\n Mesh, MeshStandardMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Texture,\n Vector3,\n Box3\n} from 'three';\nimport {\n name,\n version\n} from '../../package.json';\nimport { GlassesAssetType } from '../constants/GlassesAssetType';\nimport { transitionsMirrorMaterialRotation } from '../constants/envMap/CubeMap';\nimport {\n GlassesMaterials\n} from '../constants/Materials';\nimport { parseLandmarksGltfScene, parseLensBBGltfScene } from '../helpers/GeometryHelper';\nimport { generateFlatTexture } from '../helpers/ImageHelper';\nimport { MILLIMETERS2METERS_SCALINGFACTOR } from '../helpers/MathHelper';\nimport { AssetLoader, GltfAsset } from '../loaders/AssetLoader';\nimport { GlassesSceneData } from './GlassesSceneData';\nimport { GlRenderDebugOptions } from './GlRenderDebugOptions';\nimport { GlassesLoadingCallbacks } from './GlRenderOptions';\nimport { GLTFGlasses, IGLFTGeometryCallbacks } from './GLTFGlasses';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'GlassesRenderer');\n\nenum GlassesState {\n PROCESSING,\n READY\n}\n\ninterface EnvMapsLoading {\n cubeMapLoaded: Promise;\n envMapLoaded: Promise;\n}\n\ntype GlassesMatricesCallback = (glasses: Glasses,\n frameno: number,\n noseIndex: number,\n glassesRotation: number,\n offsetY: number,\n offsetZ: number,\n debug: GlRenderDebugOptions,\n scalingFactor: number,\n defaultPoses: boolean)=>{ mvp: Matrix4, world: Matrix4}\n\ninterface IGeometryCallbacks {\n gltfGeometryCallbacks: IGLFTGeometryCallbacks,\n glassesMatricesCallback: GlassesMatricesCallback\n}\n\n/**\n * This class abstracts B3D and glTF glasses for rendering purposes. It exposes an Object3D, glassesContainer,\n * which can be inserted in a scene for rendering glasses (and has as its child the b3d or gltf glasses),\n * and a state to tell us if the glasses are being loaded or are ready for rendering\n */\nclass Glasses {\n\n public state: GlassesState; // glasses loading or ready for rendering\n private currentAssetType: GlassesAssetType; // type of current glasses asset\n public glassesContainer: Object3D; // glasses scene container\n\n private upc: string;\n\n private b3dGlasses: B3DMesh; // scene object for b3d glasses\n private b3DGlassesMaterialType: GlassesMaterials;\n private b3dGlassesGeometry: GlassesB3DGeometry; // geometry for fitting purposes (b3d)\n private gltfGlasses: GLTFGlasses; // scene object for gltf glasses\n private cubeEnvMap: CubeTexture; // environment map for b3d lenses (we need to consolidate with envMap)\n public headShadowMap: Texture;\n private blankTexture: Texture;\n private staticMultipassSRP: GlassesB3DTransitionMirrorSRP;\n private mirrorMultipassSRP: GlassesB3DTransitionMirrorSRP;\n private lensesMirrorMultipassSRP: LensStandardTransitionMirrorSRP;\n private addObjectToScene: (obj: Object3D) => void;\n private camera: PerspectiveCamera;\n private shouldApplyfloatingNosepadOffset: boolean;\n private assetLoader: AssetLoader;\n\n // lens management properties\n private landmarks = new Map();\n private additionalGlassesMeshes = new Array<{mesh: Mesh, originalPos: Vector3, originalRot: Euler}>();\n private cachedCheckLensMap: boolean;\n private cachedHideLenses: boolean;\n private cachedHideFrame: boolean;\n private fastFittingMode: boolean;\n\n // debug structures\n private debugContainer: Object3D;\n private fittingOrigin: Mesh;\n private axesHelper: AxesHelper;\n private debugOpts: GlRenderDebugOptions;\n\n constructor({debug}: {debug: GlRenderDebugOptions}, addToScene: (obj: Object3D)=>void, camera: PerspectiveCamera) {\n this.currentAssetType = GlassesAssetType.UNDEFINED;\n this.state = GlassesState.PROCESSING;\n this.glassesContainer = new Object3D();\n this.assetLoader = new AssetLoader();\n this.glassesContainer.name = 'glasses container';\n this.addObjectToScene = addToScene;\n this.camera = camera;\n this.b3DGlassesMaterialType = GlassesMaterials.B3D_TRANSITION_STATIC;\n\n this.debugContainer = new Object3D();\n this.debugContainer.name = 'debug container';\n this.addObjectToScene(this.debugContainer);\n this.debugOpts = debug;\n\n if (this.debugOpts.showGizmos) {\n this.fittingOrigin = new Mesh(new SphereGeometry(2 * MILLIMETERS2METERS_SCALINGFACTOR, 64, 64));\n this.fittingOrigin.name = 'noseTip';\n this.fittingOrigin.material = new MeshStandardMaterial();\n this.debugContainer.add(this.fittingOrigin);\n }\n\n if (this.debugOpts.showAxes) {\n this.axesHelper = new AxesHelper();\n this.debugContainer.add(this.axesHelper);\n }\n\n this.blankTexture = generateFlatTexture(new Color(1, 1, 1), 4, 4);\n\n //SRP instancing\n this.lensesMirrorMultipassSRP = new LensStandardTransitionMirrorSRP({\n enableMirrorPass: true\n });\n\n this.staticMultipassSRP = new GlassesB3DTransitionMirrorSRP({\n stencilStart: 0,\n stencilEnd: 30,\n enableMirrorPass: false,\n srpType: 'GLASSES_MULTIPASS_MATERIAL'\n });\n\n this.mirrorMultipassSRP = new GlassesB3DTransitionMirrorSRP({\n stencilStart: 0,\n stencilEnd: 30,\n enableMirrorPass: true,\n srpType: 'GLASSES_MIRROR_MULTIPASS_MATERIAL'\n });\n\n this.b3DGlassesMaterialType = (debug.useStaticTransitionMaterial) ?\n GlassesMaterials.B3D_TRANSITION_STATIC :\n GlassesMaterials.B3D_TRANSITION_MIRROR_DYNAMIC;\n }\n\n public dispose(){\n this.headShadowMap?.dispose();\n this.blankTexture?.dispose();\n this.glassesContainer?.clear();\n this.b3dGlasses?.dispose();\n this.cubeEnvMap?.dispose();\n }\n\n public updateCubeMap(cubeEnvMap: CubeTexture) {\n this.cubeEnvMap?.dispose();\n this.cubeEnvMap = cubeEnvMap;\n\n if (!!this.b3dGlasses?.getMirrorMaterial()) {\n this.b3dGlasses.getMirrorMaterial().setParameters({\n envMap: cubeEnvMap,\n });\n this.b3dGlasses.getMirrorMaterial().needsUpdate = true;\n }\n\n if (!!this.gltfGlasses) {\n this.gltfGlasses.updateCubeEnvMap(cubeEnvMap);\n }\n }\n\n public updateLandmarks(glassesWorldMatrix: mat4) {\n if (this.landmarks.size === 0) { return; }\n\n const glassesWorld = new Matrix4().makeScale(1, -1, 1).multiply(new Matrix4().fromArray(glassesWorldMatrix));\n for (const mark of this.landmarks.keys()) {\n const landmark = this.landmarks.get(mark);\n landmark.mesh.position.copy(landmark.originalPos);\n landmark.mesh.position.applyMatrix4(glassesWorld);\n landmark.mesh.scale.set(2.5, 2.5, 2.5);\n //uncomment the following line to draw the landmarks always in front\n //landmark.mesh.position.multiplyScalar(0.5);\n }\n }\n\n public updateAdditionalObjects(glassesWorldMatrix: mat4) {\n if (this.additionalGlassesMeshes.length === 0) { return; }\n\n const glassesWorld = new Matrix4().makeScale(1, -1, 1).multiply(new Matrix4().fromArray(glassesWorldMatrix));\n for (const o of this.additionalGlassesMeshes) {\n o.mesh.position.copy(o.originalPos);\n o.mesh.position.applyMatrix4(glassesWorld);\n const original = new Quaternion().setFromEuler(o.originalRot);\n const glassesRotation = new Quaternion().setFromRotationMatrix(glassesWorld);\n const offsetRotation = new Quaternion().setFromEuler(new Euler(Math.PI / 2, 0, 0));\n // original.multiply(offsetRotation);\n glassesRotation.multiply(original.multiply(offsetRotation));\n o.mesh.rotation.setFromQuaternion(glassesRotation);\n // o.mesh.rotation.setFromRotationMatrix(glassesWorld);\n\n }\n }\n\n private clearLandmarkAndLensBBox() {\n for (const o of this.additionalGlassesMeshes) {\n o.mesh.removeFromParent();\n }\n\n for (const o of this.landmarks.values()) {\n o.mesh.removeFromParent();\n }\n }\n\n public setLinearTosRGBIridescence(value: boolean){\n this.gltfGlasses?.setLinearTosRGBIridescence(value);\n }\n\n public setsRGBToLinearTransitionsLenses(value: boolean){\n this.gltfGlasses?.setsRGBToLinearTransitionsLenses(value);\n }\n\n private addQAHelpers(type: GlassesAssetType){\n if(type !== GlassesAssetType.B3D) return;\n\n for(const landmark of this.landmarks.values()){\n this.addObjectToScene(landmark.mesh);\n }\n\n for(const additionalObject of this.additionalGlassesMeshes.values()){\n this.addObjectToScene(additionalObject.mesh);\n }\n }\n\n public scaleGltfGlasses(scaleFactor: number): void{\n if(this.currentAssetType === GlassesAssetType.GLTF)\n this.glassesContainer.traverse((o)=>{\n if(o.name === 'Glasses_GRP')\n o.scale.setScalar(scaleFactor);\n });\n }\n\n // this loads a glasses asset (b3d or gltf) and sets up the scene\n public setGlasses(glasses: B3dAsset | GltfAsset,\n envMapsLoaders: EnvMapsLoading,\n debug: GlRenderDebugOptions,\n headPosesCount,\n geometryCallbacks: IGeometryCallbacks,\n callbacks ?: GlassesLoadingCallbacks,\n forceUpdate?: boolean,\n defaultHeadPoses ?: boolean): Promise < boolean > {\n\n const isB3D = ('textures' in glasses);\n\n const textureCountChanged = \n glasses.upc === this.upc && \n isB3D && \n this.b3dGlasses &&\n (glasses as B3dAsset).textures.length != this.b3dGlasses.getTextures().colors.length;\n if (textureCountChanged\n || (isB3D && forceUpdate)\n || glasses.upc !== this.upc\n || debug.checkLensMap != this.cachedCheckLensMap\n || debug.hideLenses != this.cachedHideLenses\n || debug.hideFrame != this.cachedHideFrame) {\n this.b3dGlasses?.dispose();\n this.cachedCheckLensMap = debug.checkLensMap;\n this.cachedHideLenses = debug.hideLenses;\n this.cachedHideFrame = debug.hideFrame;\n const callbacksDefined = callbacks !== undefined;\n if (callbacksDefined && callbacks.onStart !== undefined) {\n callbacks.onStart(this.upc);\n }\n \n this.state = GlassesState.PROCESSING;\n this.upc = glasses.upc; // we set this here so it records the last upc asked\n logger.debug('processing glasses', glasses);\n\n const glassesLoadingPromise = isB3D ?\n Promise.all([envMapsLoaders.cubeMapLoaded, envMapsLoaders.envMapLoaded]).then(\n ()=> this.processB3DAsset(glasses as B3dAsset, debug))\n :\n Promise.all([envMapsLoaders.cubeMapLoaded, envMapsLoaders.envMapLoaded]).then(\n ()=> this.processGltfAsset(glasses as GltfAsset, geometryCallbacks.gltfGeometryCallbacks, debug));\n\n return glassesLoadingPromise.then((result) => {\n // perform changess to scene and global object if loaded upc === this.upc\n if (this.upc === result.upc) {\n this.currentAssetType = result.assetType;\n\n this.shouldApplyfloatingNosepadOffset = result.shouldApplyfloatingNosepadOffset;\n this.fastFittingMode = result.fastFittingMode;\n let shouldAddQaHelpers = false;\n if (result.assetType === GlassesAssetType.B3D) {\n\n shouldAddQaHelpers = (glasses as B3dAsset).glassesLandmarks !== undefined;\n this.b3dGlasses = result.sceneObject as B3DMesh;\n\n const mvps: Matrix4[] = [];\n // return 0 or the number of headposes clamped to 15\n // in the case of VM, always returns 1\n\n for (let frame = 0; frame < headPosesCount; frame++) {\n mvps[frame] = geometryCallbacks.glassesMatricesCallback(this, frame, 0, 0, 0, 0, debug, undefined, defaultHeadPoses).mvp;\n }\n\n this.b3dGlassesGeometry.sortTrianglesForAllFrames(mvps);\n // does it check if the pose is the same as the current one?\n (result.sceneObject as B3DMesh).setPose(0, 0, {});\n } else {\n this.gltfGlasses = result.gltfObject;\n shouldAddQaHelpers = (glasses as GltfAsset).misc !== undefined;\n }\n\n // not needed, but useful for debug purposes\n // computeWorldBounds(result.sceneObject, false);\n\n logger.debug('using glasses ' + result.upc, result.sceneObject, this.getFlare());\n\n this.glassesContainer.clear();\n this.glassesContainer.add(result.sceneObject);\n if(shouldAddQaHelpers)\n this.addQAHelpers(result.assetType);\n this.headShadowMap = result.shadowMap;\n this.headShadowMap.name = this.upc + ' shadow';\n\n // no repeat for support WEBGL1 (NPOT support)\n this.headShadowMap.wrapS = ClampToEdgeWrapping;\n this.headShadowMap.wrapT = ClampToEdgeWrapping;\n // disable mipmapping for support WEBGL1 (NPOT support)\n this.headShadowMap.minFilter = LinearFilter;\n\n this.headShadowMap.needsUpdate = true;\n \n this.state = GlassesState.READY;\n\n if (callbacksDefined && callbacks.onFinish !== undefined) {\n callbacks.onFinish(this.upc);\n }\n\n }\n return Promise.resolve(true);\n }).catch((result: Error) => {\n logger.error(result);\n callbacks.onError(this.upc);\n return Promise.resolve(false);\n });\n }\n\n return Promise.resolve(false);\n }\n\n public hasLandmarks(): boolean {\n return (this.b3dGlasses && this.landmarks.size > 0) ||\n (this.gltfGlasses && this.gltfGlasses.hasLandmarks);\n }\n\n public getMultipasses(): Array {\n return [this.staticMultipassSRP, this.mirrorMultipassSRP, this.lensesMirrorMultipassSRP];\n }\n\n public setPose(poseIndex: number, texturePoseIndex?: number) {\n if (this.currentAssetType === GlassesAssetType.B3D) {\n this.b3dGlasses.setPose(poseIndex, texturePoseIndex ?? poseIndex);\n }\n }\n\n private processB3DAsset(glasses: B3dAsset,\n debug: GlRenderDebugOptions): Promise {\n\n const b3dAsset = glasses as B3dAsset;\n this.b3dGlassesGeometry = B3DFactory.buildGlassesBspTree(glasses.objModel, false);\n\n const lensMap = b3dAsset.lensMap ? new CanvasTexture(b3dAsset.lensMap) : generateFlatTexture(new Color(1, 1, 1), 4, 4);\n const glassesColors = [];\n if(debug.checkLensMap)\n glassesColors.push(lensMap);\n else\n b3dAsset.textures.forEach(tex => glassesColors.push(new CanvasTexture(tex)));\n\n const glassesData = {\n resource: glasses.upc,\n glassesColors: glassesColors,\n glassesMult: new CanvasTexture(b3dAsset.transparency),\n glassesGeometry: undefined,\n };\n\n const b3dGlasses = new B3DMesh(this.b3dGlassesGeometry,\n glassesData, {\n initMaterialState: B3DMeshMaterialState.MIRROR,\n useStandardMVPUniform: false\n });\n\n b3dGlasses.getMirrorMaterial().setParameters({\n lensMap,\n envMap: this.cubeEnvMap,\n hideLenses: debug.hideLenses ? debug.hideLenses : false,\n reflectionVecMat: new Matrix3().setFromMatrix4(new Matrix4().makeRotationY(transitionsMirrorMaterialRotation))\n });\n b3dGlasses.getMirrorMaterial().useStandardMVP(false);\n\n b3dGlasses.getGradientMaterial().setParameters({\n lensMap,\n envMap: this.cubeEnvMap,\n reflectionVecMat: new Matrix3().setFromMatrix4(new Matrix4().makeRotationY(transitionsMirrorMaterialRotation))\n });\n b3dGlasses.getGradientMaterial().useStandardMVP(false);\n\n b3dGlasses.getTransitionMaterial().setParameters({\n lensMap,\n hideLenses: debug.hideLenses ? debug.hideLenses : false,\n });\n b3dGlasses.getTransitionMaterial().useStandardMVP(false);\n\n b3dGlasses.getTransitionMaterial().setDefines({HIDE_LENSES: debug.hideLenses ? 1 : 0, HIDE_FRAME: debug.hideFrame ? 1 : 0});\n b3dGlasses.getMirrorMaterial().setDefines({HIDE_LENSES: debug.hideLenses ? 1 : 0, HIDE_FRAME: debug.hideFrame ? 1 : 0});\n b3dGlasses.getGradientMaterial().setDefines({HIDE_LENSES: debug.hideLenses ? 1 : 0, HIDE_FRAME: debug.hideFrame ? 1 : 0});\n\n const headShadowMap = new CanvasTexture(glasses.shadow);\n \n return new Promise((resolve) => {\n const glassesData = new GlassesSceneData(glasses.upc, b3dGlasses, GlassesAssetType.B3D, headShadowMap, false, false);\n if(glasses.glassesLandmarks === undefined && glasses.lensBoundingBox === undefined){\n this.clearLandmarkAndLensBBox();\n resolve(glassesData);\n }\n \n const promises: Array> = [Promise.resolve(undefined), Promise.resolve(undefined)];\n if(glasses.glassesLandmarks !== undefined) {\n promises[0] = this.assetLoader.parseGltf(glasses.glassesLandmarks.arrayBuffer);\n }\n\n if(glasses.lensBoundingBox !== undefined) {\n promises[1] = this.assetLoader.parseGltf(glasses.lensBoundingBox.arrayBuffer);\n }\n\n Promise.all(promises).then((gltfarray)=>{\n const landmarkGltf = gltfarray[0];\n const lensBBGltf = gltfarray[1];\n if(landmarkGltf && lensBBGltf) {\n this.clearLandmarkAndLensBBox();\n this.landmarks = parseLandmarksGltfScene(landmarkGltf);\n this.additionalGlassesMeshes = parseLensBBGltfScene(lensBBGltf, 3, 1.2);\n resolve(glassesData);\n } else {\n if(landmarkGltf){\n this.clearLandmarkAndLensBBox();\n this.landmarks = parseLandmarksGltfScene(landmarkGltf);\n resolve(glassesData);\n }\n if(lensBBGltf){\n this.clearLandmarkAndLensBBox();\n this.additionalGlassesMeshes = parseLensBBGltfScene(lensBBGltf, 3, 1.2);\n resolve(glassesData);\n }\n }\n });\n });\n }\n\n private processGltfAsset(glasses: GltfAsset, geometryCallbacks: IGLFTGeometryCallbacks, debug: GlRenderDebugOptions): Promise {\n const gltfGlasses = new GLTFGlasses(this.cubeEnvMap, this.assetLoader, geometryCallbacks);\n const gltfScene = gltfGlasses.set(glasses, debug);\n\n // set head shadow map from gltf glasses\n const headShadowMap = gltfGlasses.getHeadShadowMap() ?? this.blankTexture;\n\n return Promise.resolve(new GlassesSceneData(glasses.upc, gltfScene, GlassesAssetType.GLTF, headShadowMap,\n gltfGlasses.getApplyNosepadOffset(), gltfGlasses.useFastFittingMode(), gltfGlasses));\n }\n\n public updateFittingOrigin(offsetY = 0, offsetZ = 0){\n this.gltfGlasses.updateFastFittingOrigin(offsetY,offsetZ);\n }\n\n public updateHeadWorldMatrix(worldMatrix: Matrix4): void {\n if (this.currentAssetType === GlassesAssetType.B3D) {\n // we do nothing here, as the mvp is directly fed to the shader\n }\n if (this.currentAssetType === GlassesAssetType.GLTF && this.gltfGlasses !== undefined) {\n this.gltfGlasses.updateHeadWorldMatrix(worldMatrix);\n }\n }\n\n public useFastFittingMode(): boolean {\n return this.fastFittingMode;\n }\n\n public shouldApplyFloatingNosepadOffset(): boolean {\n return this.shouldApplyfloatingNosepadOffset;\n }\n\n public setVisibility(visible: boolean): void {\n this.glassesContainer.visible = visible;\n }\n\n public setMaterialParameters({\n glassesMvp,\n glassesWorld,\n taper,\n scale,\n fadePositionZ,\n enableFade,\n sphereOrigin,\n lensDescription,\n lensInterpolation\n }: {\n glassesMvp: Matrix4,\n glassesWorld: Matrix4,\n taper: number,\n scale: number,\n fadePositionZ: number,\n enableFade: boolean,\n sphereOrigin: Vector3,\n lensDescription: LensDescription\n lensInterpolation: number\n }): void {\n\n \n\n if (this.currentAssetType === GlassesAssetType.B3D) {\n const lensesParameters = computeLensParameters(lensDescription, lensInterpolation);\n\n if (lensesParameters.lensType === LensTypes.INTEGRATED ||\n (lensesParameters.lensType === LensTypes.TRANSITION_MIRROR &&\n this.b3DGlassesMaterialType === GlassesMaterials.B3D_TRANSITION_STATIC)) {\n\n // we need to use the static material and pipeline\n this.b3dGlasses.changeMaterialState(B3DMeshMaterialState.TRANSITION);\n\n this.b3dGlasses.getTransitionMaterial().setParameters({\n // because vm-renderer-webgl renders upside-down\n mvp: glassesMvp,\n flare: this.getFlare(),\n taper: taper,\n scale: scale,\n sideInFront: 0.0,\n fadePositionZ: fadePositionZ,\n enableFade: true,\n lensTransmission: lensesParameters.transmission[0],\n transmissionCorrectionFactor: lensesParameters.transmissionCorrectionFactor,\n });\n\n //(this.b3dGlasses as any).material = new MeshBasicMaterial({ color: 0xff0000 });\n\n } else if (lensesParameters.lensType === LensTypes.TRANSITION_MIRROR) {\n\n // dynamic transition mirror in any other case\n\n this.b3dGlasses.changeMaterialState(B3DMeshMaterialState.MIRROR);\n this.b3dGlasses.getMirrorMaterial().setParameters({\n // because vm-renderer-webgl renders upside-down\n mvp: glassesMvp,\n world: glassesWorld,\n flare: this.getFlare(),\n taper: taper,\n scale: scale,\n sideInFront: 0.0,\n fadePositionZ: fadePositionZ,\n enableFade: enableFade,\n lensTransmission: lensesParameters.transmission[0],\n transmissionCorrectionFactor: lensesParameters.transmissionCorrectionFactor,\n envMapIntensity: 2.0,\n sphereOrigin: sphereOrigin.add(new Vector3(0, 20, -80)), // correction factor wrt head position\n lensCoatingSpecularity: lensesParameters.coatingSpecularity[0],\n lensCoatingSpecularColor: lensesParameters.coatingSpecularColor[0],\n });\n } else if (lensesParameters.lensType === LensTypes.GRADIENT) {\n\n // dynamic transition mirror in any other case\n\n this.b3dGlasses.changeMaterialState(B3DMeshMaterialState.GRADIENT);\n this.b3dGlasses.getGradientMaterial().setParameters({\n // because vm-renderer-webgl renders upside-down\n mvp: glassesMvp,\n world: glassesWorld,\n flare: this.getFlare(),\n taper: taper,\n scale: scale,\n sideInFront: 0.0,\n fadePositionZ: fadePositionZ,\n enableFade: enableFade,\n \n envMapIntensity: 2.0,\n sphereOrigin: sphereOrigin.add(new Vector3(0, 20, -80)), // correction factor wrt head position\n lensCoatingSpecularColor: lensesParameters.coatingSpecularColor,\n lensTransmission: lensesParameters.transmission,\n lensCoatingSpecularity: lensesParameters.coatingSpecularity,\n heightOnLensInterpolationFactor: lensesParameters.gradientHeight,\n\n lensMinY: this.b3dGlasses.geometry.boundingBox.min.y,\n lensMaxY: this.b3dGlasses.geometry.boundingBox.max.y\n\n\n });\n } \n } else if (this.currentAssetType === GlassesAssetType.GLTF) {\n // set on builder material need to be compiled with features\n this.gltfGlasses.setMaterials({\n taper,\n scale,\n fadePositionZ,\n enableFade\n },\n lensDescription,\n lensInterpolation,\n new Matrix4().copy(this.camera.matrixWorld).premultiply(glassesWorld)\n );\n }\n\n }\n\n public setTransform(worldMatrix: Matrix4): void {\n if (this.currentAssetType === GlassesAssetType.B3D) {\n this.b3dGlasses.matrixAutoUpdate = false;\n this.b3dGlasses.matrix.copy(worldMatrix);\n }\n if (this.currentAssetType === GlassesAssetType.GLTF && this.gltfGlasses !== undefined) {\n this.gltfGlasses.setTransform(worldMatrix);\n }\n\n // debug purpose\n if (this.fastFittingMode) {\n this.debugContainer.visible = true;\n if (this.debugOpts.showGizmos) {\n this.fittingOrigin.matrix.copy(worldMatrix);\n this.fittingOrigin.matrixAutoUpdate = false;\n }\n\n if (this.debugOpts.showAxes) {\n this.axesHelper.matrix.copy(worldMatrix);\n this.axesHelper.matrixAutoUpdate = false;\n }\n } else {\n this.debugContainer.visible = false;\n }\n }\n\n public getGlassesGeometry() : BufferGeometry {\n if (this.currentAssetType === GlassesAssetType.B3D) {\n return this.b3dGlassesGeometry.getBufferGeometry();\n }\n if (this.currentAssetType === GlassesAssetType.GLTF && this.gltfGlasses !== undefined) {\n return this.gltfGlasses.getFittingGeometry();\n }\n }\n\n public getFlare() : number {\n if (this.currentAssetType === GlassesAssetType.B3D) {\n return this.b3dGlassesGeometry.getFlare();\n }\n\n if (this.currentAssetType === GlassesAssetType.GLTF && this.gltfGlasses !== undefined) {\n return this.gltfGlasses.getFlare();\n }\n }\n\n public getAABB(): Box3 {\n if (this.currentAssetType === GlassesAssetType.B3D) {\n return new Box3(); // temporary\n } \n return this.gltfGlasses.getAABB();\n\n }\n\n public getActualGlasses() : B3DMesh | GLTFGlasses {\n if (this.currentAssetType === GlassesAssetType.B3D) {\n return this.b3dGlasses;\n }\n if (this.currentAssetType === GlassesAssetType.GLTF && this.gltfGlasses!== undefined) {\n return this.gltfGlasses;\n }\n }\n\n\n}\n\ninterface ILensDescription {\n transmission: Color[];\n transmissionCorrectionFactor: number;\n lensCoatingSpecularColor: Color;\n lensCoatingSpecularity: number;\n lensesMaterialType: LensTypes;\n }\n\nexport {\n Glasses,\n GlassesState,\n EnvMapsLoading,\n IGeometryCallbacks\n};\n","import { B3dAsset } from '@luxottica/vm-glasses';\nimport { AssetLoader, GltfAsset } from './loaders/AssetLoader';\nimport { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { HeadStandardShadowMaterial, LensDescription } from '@luxottica/vm-renderer-core';\nimport { GlRenderDebugOptions } from './objects/GlRenderDebugOptions';\nimport { GlassesRTWebGLRenderer, SceneSorter } from '@luxottica/glasses-rt-webglrenderer';\nimport { mat4 } from 'gl-matrix';\nimport {\n BoxGeometry,\n BufferAttribute,\n BufferGeometry,\n DataTexture,\n DoubleSide, EquirectangularReflectionMapping, Euler,\n Float32BufferAttribute,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n NoBlending,\n Object3D,\n PerspectiveCamera,\n Scene,\n sRGBEncoding,\n Vector2,\n Vector3,\n Vector4,\n HalfFloatType,\n Color,\n BoxHelper,\n Raycaster,\n LinearMipMapLinearFilter\n} from 'three';\nimport { SRBGShader } from './composer/shaders/SRGBShader';\nimport { name, version } from '../package.json';\nimport { BackgroundTexture } from './BackgroundTexture';\nimport { EffectComposer } from './composer/EffectComposer';\nimport { RenderPass } from './composer/RenderPass';\nimport { ShaderPass } from './composer/ShaderPass';\nimport { FillShader } from './composer/shaders/FillShader';\nimport { DefaultGlRenderDebugOptions } from './constants/DefaultGlRenderDebugOptions';\nimport { DefaultGlRenderOptions } from './constants/DefaultGlRenderOptions';\nimport { RenderType } from './constants/RenderType';\nimport GeometryDataEngine from './GeometryDataEngine';\nimport { Inspector } from './Inspector';\nimport { Glasses, GlassesState, EnvMapsLoading, IGeometryCallbacks } from './objects/Glasses';\nimport { GlRenderOptions } from './objects/GlRenderOptions';\nimport { RenderDebugResponse } from './objects/RenderDebugResponse';\nimport { RenderVideoData } from './objects/RenderVideoData';\nimport RenderDataUtils from './RenderDataUtils';\nimport { DepthRenderer } from './renderers/DepthRenderer';\nimport { computeWorldBounds } from './helpers/GeometryHelper';\nimport { MILLIMETERS2METERS_SCALINGFACTOR } from './helpers/MathHelper';\nimport { GlassesInspector } from './renderers/GlassesInspector';\nimport { FittingOffset } from './constants/FittingOffset';\nimport { HeadPoses, getNearestPoseOrientation } from './objects/HeadPoses';\nimport { GlScreenshot } from './objects/GlScreenshot';\nimport { GLTFGlasses } from './objects/GLTFGlasses';\n\nlet SceneInspector;\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'ThreeRender');\n\nconst sanitizeDpi = (dpi) => {\n if (isNaN(dpi) || dpi === 0) {\n return 2;\n }\n return dpi;\n};\nexport default class ThreeRender {\n\n private canvas: HTMLCanvasElement;\n private targetSize: any;\n private readonly defaultTargetSize = { width: 960, height: 1280 };\n\n private renderer: GlassesRTWebGLRenderer;\n private composer: EffectComposer;\n private scene: Scene;\n private sceneSorter: SceneSorter;\n private camera: PerspectiveCamera;\n private fillPass: ShaderPass;\n private sRGBPass: ShaderPass;\n private noseTip: Mesh;\n\n private geometryDataEngine: GeometryDataEngine;\n private backgroundTexture: BackgroundTexture;\n private envMapsLoaded: EnvMapsLoading;\n private assetLoader = new AssetLoader();\n private options: Required;\n\n private glassesLoadingPromise: Promise;\n private faceLoadingPromise: Promise;\n private glasses: Glasses;\n\n private head: Mesh;\n private headMaterial: HeadStandardShadowMaterial;\n private magicHeadScaleNumber = 1.063;\n\n // head vertex index used for discard fragments which z position is > headZThreshold\n private headZThresholdVertexIndex = 13066;\n private headZThreshold: number;\n\n private cropOffset: {x: number, y: number} = {x: 0, y: 0};\n private screenSpaceRatio: {width: number, height: number} = {width: 1, height: 1};\n private resolveScreenshot: () => void;\n private dpr: number;\n private scaleGlassesOnly = true;\n private useFaceBreadthForScaling = true;\n\n // private lensBoundingBox: LensBoundingBox;\n\n private headMVPMat: mat4;\n private headWorldMat: mat4;\n\n private scalingFactor = 1;\n private unitsChanged = false;\n\n private debugBox: any;\n private debugHead: any;\n private inspector: any;\n private insp = false;\n private inspectorPositionShift = new Vector3();\n\n private headPoses: HeadPoses;\n\n // private b3DMaterial: GlassesMaterials = GlassesMaterials.B3D_TRANSITION_STATIC;\n\n constructor(\n canvas: HTMLCanvasElement,\n options?: GlRenderOptions,\n ) {\n\n this.initializeOptions(options);\n\n this.geometryDataEngine = new GeometryDataEngine(\n DefaultGlRenderOptions.faceTri,\n DefaultGlRenderOptions.headUV,\n );\n\n this.canvas = canvas;\n this.renderer = new GlassesRTWebGLRenderer({\n antialias: true,\n canvas: this.canvas,\n alpha: options.mirror ? undefined : true,\n preserveDrawingBuffer: !options.mirror\n });\n\n this.renderer.setClearColor(new Color('rgb(255, 255, 255)'));\n this.renderer.transmissionMinFilter = LinearMipMapLinearFilter;\n\n if (options.mirror) {\n this.dpr = Math.min(sanitizeDpi(this.options.debugOptions.dpi), window.devicePixelRatio);\n this.renderer.setPixelRatio(this.dpr);\n } else {\n this.dpr = navigator.userAgent.match(/(iPhone|iPad)/i) ? 2 : 4; // to enable 4x antialiasing\n const w = this.canvas.width;\n const h = this.canvas.height;\n this.renderer.setPixelRatio(this.dpr);\n this.renderer.setSize(w, h, true);\n }\n\n this.renderer.outputEncoding = sRGBEncoding;\n this.renderer.physicallyCorrectLights = true;\n\n this.scene = new Scene();\n\n this.sceneSorter = new SceneSorter(this.scene, new Raycaster(), this.renderer);\n this.sceneSorter.setQualityLevel('moving', this.options.debugOptions.transmissionQuality);\n this.sceneSorter.setQuality('moving');\n (window as any).sceneSorter = this.sceneSorter;\n\n this.debugBox = new Mesh(\n new BoxGeometry(100 * this.scalingFactor, 100 * this.scalingFactor, 100 * this.scalingFactor),\n new MeshBasicMaterial({ color: 0xffff00 }));\n this.debugBox.position.z = -1030 * this.scalingFactor;\n // this.scene.add(this.debugBox);\n this.camera = new PerspectiveCamera(40, 1, 1, 600);\n this.glasses = new Glasses({ debug: this.options.debugOptions }, this.addToScene.bind(this), this.camera);\n \n for (const frp of this.glasses.getMultipasses())\n this.renderer.addSRP(frp);\n this.loadEnvMaps();\n this.scene.add(this.glasses.glassesContainer);\n\n this.head = new Mesh();\n this.head.geometry = new BufferGeometry();\n this.head.name = 'head';\n this.head.matrixAutoUpdate = false;\n this.scene.add(this.head);\n\n // this.scene.add(new AmbientLight(0xFFFFFF));\n this.composer = new EffectComposer(this.renderer, undefined, this.options.mirror ? undefined : HalfFloatType);\n if(!this.options.mirror) {\n this.sRGBPass = new ShaderPass(SRBGShader);\n }\n this.fillPass = new ShaderPass(FillShader, 'textr');\n this.composer.addPass(new RenderPass(this.scene, this.camera));\n this.composer.addPass(this.fillPass);\n this.composer.renderToScreen = true;\n\n this.backgroundTexture = new BackgroundTexture(options.mirror);\n this.headMaterial = new HeadStandardShadowMaterial({\n isVM: options.mirror ? true: false,\n colorMap: this.backgroundTexture.texture[0],\n debugColor: this.options.debugOptions.showMesh ? new Vector4(\n this.options.debugOptions.meshColor[0],\n this.options.debugOptions.meshColor[1],\n this.options.debugOptions.meshColor[2],\n this.options.debugOptions.meshColor[3])\n : new Vector4(0, 0, 0, 0.0)\n });\n\n // if fragments are discarded we need to see inside the head correctly\n this.headMaterial.side = DoubleSide; // because we will scale everything by (1,-1,1), inverting the faces\n this.headMaterial.blending = NoBlending;\n\n // Default promise in order to avoid \"undefined\" error in renderScene function\n this.glassesLoadingPromise = new Promise((resolve, reject) => {\n resolve();\n });\n\n if (this.options.debugOptions.globalDebugMethods) {\n // TODO: add explicit types for window\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).VMshowInspector = (withControls: boolean)=>{\n import('./SceneInspector').then((SceneInspectorClass)=>{\n SceneInspector = SceneInspectorClass.default;\n this.insp = true;\n this.addInspector(withControls);\n });\n };\n\n // TODO: add explicit types for window\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).VMhideInspector = ()=>{\n this.insp = false;\n this.hideInspector();\n };\n\n // TODO: add explicit types for window\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).switchCubemap = this.switchCubemap.bind(this);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).switchEnvmap = this.switchEnvmap.bind(this);\n\n // TODO: add explicit types for window\n // TODO: remove after 9.1 release\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).scaleGlassesOnly = (value: boolean)=>{\n this.scaleGlassesOnly = value;\n };\n\n // TODO: add explicit types for window\n // TODO: remove after 9.1 release\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).useFaceBreadthForScaling = (value: boolean)=>{\n this.useFaceBreadthForScaling = value;\n };\n }\n\n this.headPoses = new HeadPoses();\n logger.debug('constructed vm-renderer-threejs');\n }\n\n private addToScene(obj: Object3D){\n this.scene.add(obj);\n }\n\n public render() {\n this.renderer.render(this.scene, this.camera);\n if (this.resolveScreenshot) {\n this.resolveScreenshot();\n this.resolveScreenshot = null;\n }\n }\n\n public takeScreenshot(type = 'image/jpeg', quality = 0.9): Promise {\n return new Promise((resolve, reject) => {\n this.resolveScreenshot = () => {\n try {\n const imgURI = this.canvas.toDataURL(type, quality);\n const w = this.canvas.clientWidth;\n const h = this.canvas.clientHeight;\n resolve({imgURI, h, w});\n } catch (e) {\n reject(e);\n }\n };\n });\n }\n\n public updateOptions(\n options: GlRenderOptions\n ) {\n this.initializeOptions(options);\n this.updateRenderers();\n }\n\n public destroy = () => {\n Inspector.destroy();\n\n // dispose threejs renderer\n this.renderer?.dispose();\n if (this.renderer) {\n this.renderer.domElement = null;\n }\n\n // dispose internal types\n this.glasses?.dispose();\n this.geometryDataEngine?.dispose();\n this.head?.clear();\n this.backgroundTexture?.dispose();\n this.headMaterial?.disposeTexture();\n this.headMaterial?.dispose();\n\n // dispose scene references\n this.scene?.clear();\n this.scene?.environment?.dispose();\n this.scene = null;\n\n // this should force garbage collection on Safari and iOS\n if (this.canvas) {\n this.canvas.width = 0;\n this.canvas.height = 0;\n }\n\n // remove local references\n this.canvas = null;\n this.renderer = null;\n };\n\n public renderMirror(\n imageData: HTMLCanvasElement, // webcam image\n enableScaling: boolean,\n glasses?: B3dAsset | GltfAsset, \n video?: RenderVideoData, // head tracker info\n pose?: Float32Array,\n noseIndex = 0,\n glassesRotation = 0.0,\n templeFade = 0.0,\n offsetY = 0.0,\n offsetZ = 0.0,\n glassesTextureIndex = 7, // default texture for mirror\n lens?: LensDescription,\n environmentIntensity = 1,\n waitGlassesLoading = false,\n faceMeasure?: {pupilDist: number, faceBreadth: number}\n ): Promise {\n\n // this.scene.background = this.glasses.envMap;\n // updates renderer size based on canvas size\n const rendererSize = this.renderer.getSize(new Vector2());\n if ((rendererSize.x * this.dpr) !== this.canvas.width || (rendererSize.y * this.dpr) !== this.canvas.height) {\n this.renderer.setSize(this.canvas.width / this.dpr, this.canvas.height / this.dpr, false);\n logger.debug('updated render size from', rendererSize, this.renderer.getSize(new Vector2()));\n this.backgroundTexture.resetBackgroundTextures(true);\n }\n // update background\n this.backgroundTexture.updateMirrorTexture(imageData);\n this.scene.background = this.backgroundTexture.texture[0];\n this.headMaterial.setParameters({ colorMap: this.backgroundTexture.texture[0] });\n\n // camera aspect ratio is a little different than canvas aspect ratio. We should crop the camera,\n // maybe, through a shader?\n\n if (!video || !glasses || !pose) { // for rendering webcam image while tracker is ready,\n this.scene.visible = false;\n this.render();\n return Promise.resolve();\n }\n\n // invert the pose for Mirror experience\n const headpose = pose;\n const mirrorPose = [\n headpose[0],\n headpose[1] * -1.0,\n headpose[2] * -1.0,\n headpose[3] * -1.0,\n headpose[4],\n headpose[5],\n ];\n // update the pose\n this.headPoses.setHeadPoses(mirrorPose);\n\n let faceFeatureMeasurement = undefined;\n\n if(enableScaling)\n faceFeatureMeasurement = this.useFaceBreadthForScaling ? faceMeasure.faceBreadth : faceMeasure.pupilDist;\n const videoUpdated = this.geometryDataEngine.setMirrorVideo(\n video,\n faceFeatureMeasurement ?? video.pupillaryDistance,\n { width: imageData.width, height: imageData.height },\n enableScaling,\n this.headPoses,\n this.options.debugOptions,\n faceFeatureMeasurement != undefined && this.useFaceBreadthForScaling);\n\n if (videoUpdated) {\n\n logger.debug('updating video geometry', video.videoId, imageData.width, imageData.height);\n\n }\n const currentPose = this.headPoses.getHeadPose(0);\n const glassesPoseIndex = getNearestPoseOrientation(new Euler(currentPose[0], currentPose[1], currentPose[2]));\n if (waitGlassesLoading) {\n return this.updateHeadAndGlasses(glasses, glassesPoseIndex, 0, 15, 0, undefined, undefined, true).then(()=>{\n return this.renderScene({\n crop: false,\n poseIndex: 0,\n glassesTextureIndex: glassesTextureIndex,\n noseIndex: noseIndex,\n offsetY: offsetY,\n offsetZ: offsetZ,\n glassesRotation: glassesRotation,\n templeFade: templeFade,\n lens,\n environmentIntensity,\n });\n });\n }\n\n this.updateHeadAndGlasses(glasses, glassesPoseIndex, 0, 15, 0, undefined, undefined, true);\n // this should be useless since processing is synchronous, left here anyway in case we \n // introduce some asynchronous work\n if (this.glasses.state === GlassesState.PROCESSING) {\n\n this.scene.visible = false;\n this.render();\n return Promise.resolve();\n } \n\n // else: we have video, glasses, pose\n this.scene.visible = true;\n return this.renderScene({\n crop: false,\n poseIndex: 0,\n glassesTextureIndex: glassesTextureIndex,\n noseIndex: noseIndex,\n offsetY: offsetY,\n offsetZ: offsetZ,\n glassesRotation: glassesRotation,\n templeFade: templeFade,\n lens,\n environmentIntensity\n });\n }\n\n public renderVto(\n glasses: B3dAsset | GltfAsset,\n video: RenderVideoData,\n enableScaling: boolean,\n poseIndex = 7,\n noseIndex = 0,\n glassesRotation = 0.0,\n templeFade = 0.0,\n offsetY = 0.0,\n offsetZ = 0.0,\n lens?: LensDescription,\n environmentIntensity = 0\n ): Promise {\n this.headPoses.overwriteHeadPoses(video.headPoses);\n\n const posesCountChanged = video.headPoses.length !== this.headPoses.getHeadPosesLenght();\n const videoUpdated = this.geometryDataEngine.setVtoVideo(\n video,\n video.pupillaryDistance,\n enableScaling,\n this.options.debugOptions,\n posesCountChanged,\n poseIndex,\n this.headPoses);\n\n const dpr = this.dpr;\n const rSize = this.renderer.getSize(new Vector2()).multiplyScalar(dpr);\n const newW = this.canvas.width !== rSize.x;\n const newH = this.canvas.height !== rSize.y;\n const w = newW ? this.canvas.width : this.canvas.width/dpr;\n const h = newH ? this.canvas.height : this.canvas.height/dpr;\n if(newW || newH){\n this.renderer.setSize(w, h, true);\n }\n if (videoUpdated) {\n // if (this.measurementsRenderer !== undefined) {\n // this.createMeasurementsRenderer();\n // }\n // if (this.landmarksRenderer !== undefined) {\n // this.createLandmarksRenderer();\n // }\n\n logger.debug('updating video {} geometry', video.videoId);\n\n this.faceLoadingPromise = this.backgroundTexture.updateVtoTexture(video);\n // }\n this.composer.reset();\n }\n let pose = poseIndex;\n const isSinglePoseVideoID = this.backgroundTexture.getValidPoseCount() === 1;\n if(isSinglePoseVideoID){\n console.warn('Poses count doesn\\'t match the expected number (15). Pose index is remapped to match with respect to the current poses count');\n pose = 0;\n }\n\n //background setup\n const isB3DGlasses = this.isB3DGlasses(glasses);\n this.renderer.clearColor();\n const bgTexture = isB3DGlasses ? this.backgroundTexture.texture[pose] : this.backgroundTexture.sRGBTexture[pose];\n const hideBg = this.options.debugOptions.hideBackground;\n this.scene.background = hideBg ? new Color('rgba(255, 255, 255, 0)') : bgTexture;\n if(hideBg) this.renderer.setClearColor(0xffffff, 0);\n if(!isB3DGlasses) {\n if(!this.composer.hasPass(this.sRGBPass)){\n this.composer.addPass(this.sRGBPass);\n }\n } else {\n this.composer.removePass(this.sRGBPass);\n }\n //head and glasses setup\n // if it has only one texture we use it.\n // if not we check how many background images there are: if there's one background we assume the standard pose\n // if there are multiple background we use the given pose\n const isSingleTexture = isB3DGlasses && (glasses as B3dAsset).textures.length == 1;\n const texturePoseIndex = isSingleTexture ? 0 :\n isSinglePoseVideoID ? 7 : poseIndex;\n return this.updateHeadAndGlasses(glasses, pose, pose, this.headPoses.getHeadPosesLenght(), texturePoseIndex, true, isSingleTexture || posesCountChanged)\n .then(() => {\n this.glasses.setsRGBToLinearTransitionsLenses(!isB3DGlasses);\n this.glasses.setLinearTosRGBIridescence(false);\n // update the head pose and background image\n // this.backgroundTexture.updateMirrorTexture(imageData, \"mirror texture\", this.options.debugOptions);\n\n this.headMaterial.setParameters({ colorMap: this.scene.background });\n if(hideBg) this.scene.background = undefined;\n // this.headMaterial.uniformsNeedUpdate = true;\n\n return this.renderScene({\n poseIndex: pose,\n glassesTextureIndex: pose,\n noseIndex: noseIndex,\n crop: true,\n glassesRotation: glassesRotation,\n templeFade: templeFade,\n offsetY: offsetY,\n offsetZ: offsetZ,\n lens,\n environmentIntensity\n });\n })\n .then(() => {\n const debugOptions = this.options.debugOptions;\n const cropOffset = this.cropOffset;\n const screenSpaceRatio = this.screenSpaceRatio;\n\n return {\n videoId: video.videoId,\n meshCenter: (debugOptions.calculateMeshCenter) ? this.geometryDataEngine.extractMeshCenter(\n poseIndex, this.headPoses, cropOffset, screenSpaceRatio, this.canvas\n ) : undefined,\n pupils: (debugOptions.calculatePupils) ? this.geometryDataEngine.extractPupilPixels(\n poseIndex, cropOffset, screenSpaceRatio, this.canvas, this.headPoses\n ) : undefined,\n cropOffset: cropOffset,\n screenSpaceRatio: screenSpaceRatio,\n glassesScale: this.geometryDataEngine.getGlassesScale()\n };\n });\n\n \n }\n\n private addInspector(withControls?: boolean){\n if(!this.insp)\n return;\n if(this.inspector !== undefined){\n this.inspector.updateInspector();\n return;\n }\n \n \n const helper = new BoxHelper( this.glasses.glassesContainer, 0xff00ff );\n const target = helper.geometry.boundingSphere.center.clone();\n \n \n this.inspector = new SceneInspector(this.scene, this.canvas.parentElement, this.canvas, this.camera, withControls, target);\n //this.head.matrix.copy(new Matrix4().makeTranslation(shift.x, shift.y, shift.z));\n }\n\n private hideInspector(){\n if(this.inspector !== undefined){\n this.inspector.removeInspector();\n\n //this.inspectorPositionShift.negate();\n //const shift = this.inspectorPositionShift;\n //this.camera.position.add(shift);\n //this.glasses.glassesContainer.position.add(shift);\n //this.head.position.add(shift);\n //this.head.matrix.copy(new Matrix4().makeTranslation(shift.x, shift.y, shift.z));\n this.camera.position.set(0, 0, 0);\n this.camera.rotation.set(0, 0, 0);\n //this.inspectorPositionShift = new Vector3(0, 0, 0);\n }\n this.inspector = undefined;\n }\n\n\n public updateEnvMap(texture: DataTexture) {\n texture.mapping = EquirectangularReflectionMapping;\n this.scene.environment = texture;\n }\n\n private renderScene({\n poseIndex,\n glassesTextureIndex,\n noseIndex,\n crop,\n glassesRotation = 0.0,\n templeFade = 0.0,\n offsetY,\n offsetZ,\n lens,\n environmentIntensity\n }: {\n poseIndex: number;\n glassesTextureIndex: number;\n noseIndex: number;\n crop: boolean;\n glassesRotation: number;\n templeFade: number;\n offsetY: number;\n offsetZ: number;\n lens: LensDescription | undefined,\n environmentIntensity: number\n }): Promise {\n\n return this.glassesLoadingPromise\n\n .catch((rejection: any) => {\n logger.error('glasses loading failed: ' + rejection);\n }).then(() => {\n return this.faceLoadingPromise;\n }).catch((rejection) => {\n logger.error('face loading failed: ' + rejection);\n }).then(() => {\n this.updateSceneObjects({\n poseIndex,\n glassesTextureIndex,\n noseIndex: noseIndex,\n renderType: RenderType.All,\n glassesRotation,\n templeFade,\n offsetY,\n offsetZ,\n lens,\n environmentIntensity\n });\n }).catch((rejection) => {\n logger.error('updateSceneObjects failed: ' + rejection);\n }).then(() => {\n\n if (crop) {\n this.fillCanvas(crop);\n this.composer.render();\n // this.render();\n } else {\n this.render();\n }\n }).catch((rejection) => {\n logger.error('render scene failed: ' + rejection);\n });\n }\n\n private loadEnvMaps() {\n\n // WARNING: we are currently using two different envmaps, one for the gltf glasses,\n // and another one for the iridescent lenses / b3d transition mirror. We need to unify.\n const cubeMapLoaded = \n this.assetLoader.loadCubeEnvMap(this.options.debugOptions).then((map) => {\n this.glasses.updateCubeMap(map);\n return Promise.resolve();\n });\n\n const envMapLoaded =\n this.assetLoader.loadEnvMap(this.options.debugOptions).then((tex)=> this.updateEnvMap(tex));\n\n this.envMapsLoaded = {cubeMapLoaded, envMapLoaded};\n }\n\n private updateSceneObjects({\n poseIndex,\n glassesTextureIndex,\n noseIndex,\n renderType,\n glassesRotation = 0.0,\n templeFade = 0.0,\n offsetY,\n offsetZ,\n lens,\n environmentIntensity\n }: {\n poseIndex: number;\n glassesTextureIndex: number;\n noseIndex: number;\n renderType: RenderType;\n glassesRotation?: number;\n templeFade?: number;\n offsetY: number,\n offsetZ: number,\n lens: LensDescription | undefined,\n environmentIntensity: number\n }): void {\n\n //////////////////////////////////////////////////////////////////////\n ///// Render the background\n if (renderType & RenderType.Background) {\n\n // we don't need to explicitly render since we are using three.js scene background. However,\n // in the original version, the following commented out code introduces a small offset in uv\n // textures, we need to discover why it does it\n\n // shift lookups a half pixel so that 1 of the 4 target pixels is identical to the original\n /* this.glContext.uniform2f(this.canvasGl.warper.uniforms.texOffset,\n 0.5 / this.targetSize.width,\n 0.5 / this.targetSize.height); */\n this.head.visible = false;\n this.glasses.setVisibility(false);\n }\n\n //////////////////////////////////////////////////////////////////////\n ///// Render the shadow on the face mesh\n ///// Writes head depth to depth buffer for occlusion\n\n if (renderType & RenderType.Shadow || renderType & RenderType.Glasses) {\n this.headMVPMat = this.geometryDataEngine.getHeadMatrices(poseIndex, this.headPoses, this.scalingFactor).mvp;\n this.headWorldMat = this.geometryDataEngine.getHeadMatrices(poseIndex, this.headPoses, this.scalingFactor).world;\n\n if (noseIndex < 0) {\n noseIndex = 0;\n } else if (noseIndex >= this.geometryDataEngine.getGlassesPosesCount()) {\n noseIndex = this.geometryDataEngine.getGlassesPosesCount() - 1;\n }\n }\n\n if (this.options.debugOptions.showInspector) {\n const worldMatrixInspect = this.headWorldMat[12] + ', ' + this.headWorldMat[13] + ', ' + this.headWorldMat[14];\n Inspector.addLine(worldMatrixInspect, 'headWorldPos');\n\n let cameraMatrixInspect = '';\n this.geometryDataEngine.getCameraMat(poseIndex, this.headPoses, this.scalingFactor).forEach((v) => {\n cameraMatrixInspect = cameraMatrixInspect + `${v} `;\n });\n Inspector.addLine(cameraMatrixInspect, 'camera matrix');\n\n }\n\n if (renderType & RenderType.Shadow && !this.options.debugOptions.hideShadow &&\n this.glasses.state === GlassesState.READY) {\n this.head.visible = true;\n \n if (this.glasses.useFastFittingMode()) {\n noseIndex = 0;\n }\n \n const glassesPositionY = this.geometryDataEngine.getGlassesWorldPosition(this.glasses, noseIndex, this.headPoses, {})[13];\n // y component of a couple of nose vertices in local space\n const noseVtx1 = RenderDataUtils.noseVtxRoot; // 2100\n const noseVtx2 = RenderDataUtils.noseVtxTip; // 2111\n const noseRootVertexY = this.geometryDataEngine.getGlobalShapeHomogeneous()[4 * noseVtx1 + 1];\n const noseTipVertexY = this.geometryDataEngine.getGlobalShapeHomogeneous()[4 * noseVtx2 + 1];\n\n // see ios code, this is the initial value prior to adjustment\n // (noseIndex/20.0) * 0.1 - 0.015 // magic equation for placement - default noseIndex = 4\n\n // tslint:disable-next-line: max-line-length\n // https://github.com/luxdeepblue/vm-renderer-webgl/blob/7bfbb857c2408aa32638664de1b47bc6a87451c0/src/renderers/headRenderer/HeadRenderer.ts#L92-L97\n // offset the glasses y position by an artistic value\n const vertexTrue = glassesPositionY - FittingOffset.ksGlassesOffsetY * 0.25;\n // calculate the noseOffset value to be used inside the shader,\n // the value is calculated over the extension of nose positions\n\n const newNoseIndex = this.mapVal(vertexTrue, noseRootVertexY, noseTipVertexY, 0.0, 1.0);\n const newOffset = 0.1 * newNoseIndex - 0.015;\n const headWorld = new Matrix4().makeScale(1, -1, 1).multiply(new Matrix4().fromArray(this.headWorldMat));\n this.head.matrix.copy(headWorld);\n this.geometryDataEngine.setScaleGlassesOnly(this.scaleGlassesOnly);\n this.headMaterial.setParameters({\n headScale: this.magicHeadScaleNumber / this.geometryDataEngine.getGlassesScale(),\n mvp: new Matrix4(),\n cullYmin: DepthRenderer.modelBoxMinZTopV * this.scalingFactor,\n cullYmax: DepthRenderer.modelBoxMaxZTopV * this.scalingFactor,\n noseOffset: newOffset, // not scaled because in UV space\n earOffset: 0.05, // not scaled because in UV space,:\n useStandardMVPUniform: true\n });\n\n // (this.head as any).material = new MeshBasicMaterial({ color: 0xff0000 });\n\n }\n\n //////////////////////////////////////////////////////////////////////\n ///// Render the glasses\n\n // this assumes head already rendered in depth buffer\n\n if ((renderType & RenderType.Glasses) && !this.options.debugOptions.hideGlasses &&\n this.glasses.state === GlassesState.READY) {\n\n this.glasses.setVisibility(true);\n\n const glassesMatrices = this.geometryDataEngine.getGlassesMatricesWrapper(this.glasses,\n poseIndex, noseIndex, glassesRotation,\n offsetY, offsetZ, this.headPoses, this.options.debugOptions, this.scalingFactor\n );\n this.glasses.updateLandmarks(glassesMatrices.world);\n this.glasses.updateAdditionalObjects(glassesMatrices.world); // lens bounding boxes;\n if (this.options.debugOptions.showInspector) {\n GlassesInspector.updateInspector(\n poseIndex, noseIndex, glassesRotation, glassesMatrices, this.geometryDataEngine);\n }\n\n const cameraMat = this.geometryDataEngine.getCameraMat(poseIndex, this.headPoses, this.scalingFactor);\n\n this.camera.projectionMatrix.fromArray(cameraMat);\n const scale = this.glasses.useFastFittingMode() ? 1 : this.geometryDataEngine.getGlassesScale();\n const headWorld = new Matrix4().makeScale(scale, -scale, scale).multiply(new Matrix4().fromArray(this.headWorldMat));\n\n // because vm-renderer-webgl renders upside-down, scale mvp matrix using -1 factor for Y\n const glassesMvp = new Matrix4().makeScale(1, -1, 1).multiply(new Matrix4().fromArray(glassesMatrices.mvp));\n const glassesWorld = new Matrix4().makeScale(1, -1, 1).multiply(new Matrix4().fromArray(glassesMatrices.world));\n\n if (this.glasses.useFastFittingMode()) {\n // used in gltfGlasses to change world matrix based on center and offsets\n this.glasses.updateHeadWorldMatrix(headWorld);\n // update glasses origin based on offsetY and offsetZ\n this.glasses.updateFittingOrigin(offsetY, offsetZ);\n }\n\n // because vm-renderer-webgl renders upside-down, scale world matrix using -1 factor for Y\n this.glasses.setTransform(glassesWorld);\n const taper = this.glasses.hasLandmarks() ? 0 : this.geometryDataEngine.getGlassesTaper() * this.scalingFactor;\n this.glasses.scaleGltfGlasses(this.geometryDataEngine.getGlassesScale());\n this.glasses.setMaterialParameters({\n glassesMvp: glassesMvp,\n glassesWorld: glassesWorld,\n taper,\n scale: this.geometryDataEngine.getGlassesScale(),\n fadePositionZ: this.geometryDataEngine.getFadeDistanceForGlassesAt(this.glasses, noseIndex,\n templeFade, this.headPoses, this.options.debugOptions) * this.scalingFactor,\n enableFade: true,\n sphereOrigin: new Vector3().setFromMatrixColumn(headWorld, 3),\n lensDescription: lens,\n lensInterpolation: environmentIntensity\n });\n }\n\n }\n\n private fillCanvas(enableCrop = true) {\n\n const width = this.canvas.width;\n const height = this.canvas.height;\n\n let widthRatio = 1.0;\n let heightRatio = 1.0;\n let cropOffsetX = 0.0;\n let cropOffsetY = 0.0;\n\n if (enableCrop) {\n\n logger.debug('crop is enabled');\n if (width / height > 0.75) {\n\n // we need to crop the 3:4 aspect render to match the aspect ratio\n // of this canvas.\n heightRatio = (height * 0.75) / width;\n\n const eyeCenterY = 1-this.geometryDataEngine.getEyeCenterY(this.glasses, this.headPoses, this.options.debugOptions);\n\n // make eyeCenterY down 38% from the top\n cropOffsetY = eyeCenterY - heightRatio * (1-0.38);\n if (cropOffsetY < 0.0)\n cropOffsetY = 0.0;\n else if (cropOffsetY > (1.0 - heightRatio)) {\n // max offset, pinned to bottom, is (1.0 - heightRatio)\n cropOffsetY = (1.0 - heightRatio);\n }\n } else {\n // Tall and thin crop, not too usefull - but I add it here so that we don't get skewed\n // renders if the calling code wants a tall and thin canvas\n // We will just center the image and fill vertically\n widthRatio = width / (height * 0.75);\n cropOffsetX = (1.0 - widthRatio) / 2.0;\n }\n } else {\n logger.debug('crop is disabled');\n }\n\n this.cropOffset = {\n x: cropOffsetX,\n y: cropOffsetY\n };\n this.screenSpaceRatio = {\n width: widthRatio,\n height: heightRatio,\n };\n\n this.fillPass.uniforms.cropInfo.value.set(widthRatio, heightRatio, cropOffsetX, cropOffsetY);\n // Anti-Alias based on the intermediate canvas size\n this.fillPass.uniforms.filterStep.value.set(1.5 / this.canvas.width,\n 1.5 / this.canvas.height);\n }\n\n private initializeOptions(options: GlRenderOptions) {\n if (options !== undefined) {\n\n this.options = {\n ...DefaultGlRenderOptions,\n ...options,\n };\n\n if (options.debugOptions !== undefined) {\n this.options.debugOptions = {\n ...DefaultGlRenderDebugOptions,\n ...options.debugOptions,\n };\n }\n\n logger.debug(`Update options ${JSON.stringify(this.options, null, 2)}`);\n } else {\n this.options = DefaultGlRenderOptions;\n\n logger.debug('Update options DefaultGlRenderOptions');\n }\n }\n\n private updateHeadAndGlasses(\n glasses: B3dAsset | GltfAsset,\n glassesPoseIndex: number,\n headPoseIndex: number,\n headPosesCount?: number,\n texturePoseIndex?: number,\n forceUpdateHead = false,\n forceUpdateGlasses = false,\n useDefaultHeadPoses = false): Promise {\n const headPoses = headPosesCount ?? Math.min(15, this.headPoses.getHeadPosesLenght());\n\n const geometryCallbacks: IGeometryCallbacks = {\n gltfGeometryCallbacks: {\n getFastFittingOrigin: (offsetY, offsetZ)=>{\n return new Vector3().fromArray(this.geometryDataEngine.getFastFittingOrigin(offsetY, offsetZ));\n },\n getPaceDistance: ()=>this.geometryDataEngine.getPaceDistance(),\n getGlassesScale: ()=>this.geometryDataEngine.getGlassesScale(),\n getGlassesTaper: ()=>this.geometryDataEngine.getGlassesTaper()\n },\n glassesMatricesCallback: (\n glasses: Glasses,\n frameno: number,\n noseIndex: number,\n glassesRotation: number,\n offsetY: number,\n offsetZ: number,\n debug: GlRenderDebugOptions,\n scalingFactor: number,\n defaultPoses: boolean)=>{\n const matrices = this.geometryDataEngine.getGlassesMatrices(glasses, frameno, noseIndex, glassesRotation, offsetY, offsetZ, this.headPoses, debug, scalingFactor, defaultPoses);\n return {\n mvp: new Matrix4().fromArray(matrices.mvp),\n world: new Matrix4().fromArray(matrices.world)\n };\n }\n };\n\n this.geometryDataEngine.clearGlassesPoses(glasses);\n return this.glasses.setGlasses(\n glasses,\n this.envMapsLoaded,\n this.options.debugOptions,\n headPoses,\n geometryCallbacks,\n this.options.loadingCallbacks,\n forceUpdateGlasses,\n useDefaultHeadPoses)\n .then((updated) => {\n this.glasses.setPose(glassesPoseIndex, texturePoseIndex);\n if (updated) {\n this.addInspector();\n logger.debug('updating glasses geometry');\n this.headMaterial.setParameters({ disableShadowCoordFlip: !this.isB3DGlasses(glasses), shadowMap: this.glasses.headShadowMap });\n this.headMaterial.uniformsNeedUpdate = true;\n\n if (this.isB3DGlasses(glasses)) {\n this.unitsChanged = this.scalingFactor === MILLIMETERS2METERS_SCALINGFACTOR;\n this.scalingFactor = 1;\n this.sceneSorter.activateTransmission(false);\n } else {\n const gltfGlasses = glasses as GltfAsset;\n this.unitsChanged = this.scalingFactor === 1;\n this.scalingFactor = MILLIMETERS2METERS_SCALINGFACTOR;\n\n if (gltfGlasses.sortInfo) {\n this.sceneSorter.activateTransmission(true);\n const sortInfo = gltfGlasses.sortInfo;\n this.sceneSorter.setSortInfo(\n sortInfo,\n (this.glasses.getActualGlasses() as GLTFGlasses).getGlassesData(),\n true, undefined\n );\n //this.usingPrecomputedSorting = true;\n this.sceneSorter.setSortingMethod('mLayerRenderOrder');\n } else {\n this.sceneSorter.activateTransmission(false);\n }\n\n }\n \n this.updateHead(headPoseIndex);\n this.renderer.compile(this.scene, this.camera);\n }\n else if(forceUpdateHead){\n this.updateHead(headPoseIndex);\n }\n return Promise.resolve();\n });\n }\n\n private updateHead(poseIndex: number) {\n\n const vertices = this.geometryDataEngine.getHeadShape(poseIndex, this.scalingFactor);\n const uvs = this.geometryDataEngine.getHeadUV(poseIndex);\n\n // on the assumption the geometry depends on video\n this.head.geometry = new BufferGeometry();\n this.head.geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3, false));\n this.head.geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n this.head.geometry.setIndex(new BufferAttribute(this.geometryDataEngine.getHeadTriangulation(), 1));\n\n if (poseIndex !== 0) {\n this.headMaterial.setParameters({ colorMap: this.scene.background });\n // this.headMaterial.uniformsNeedUpdate = true;\n }\n\n this.debugHead = new Mesh();\n this.debugHead.geometry = this.head.geometry;\n this.debugHead.material = new MeshBasicMaterial({ color: 0x00ff00 });\n // this.scene.add(this.debugHead);\n\n // required when updating the positions because measurement units changed\n this.head.geometry.attributes.position.needsUpdate = true;\n\n // this.head.geometry = headGeometry;\n this.head.material = this.headMaterial;\n this.headZThreshold = this.geometryDataEngine.getHeadVertexAtIndex(this.headZThresholdVertexIndex)[2];\n\n if (this.glasses.useFastFittingMode()) {\n this.headMaterial.useDiscardOverZPos(true, this.scalingFactor, this.headZThreshold);\n } else {\n this.headMaterial.useDiscardOverZPos(false, this.scalingFactor, this.headZThreshold);\n }\n\n computeWorldBounds(this.head, true);\n }\n\n //useless method keeped for API compatibility with old renderer\n public revealHead() {return Promise.resolve();}\n\n private updateRenderers() {\n this.geometryDataEngine.measurementsCallback = this.options.measurementsCallback;\n this.headMaterial.setParameters({\n debugColor: this.options.debugOptions.showMesh ? new Vector4(\n this.options.debugOptions.meshColor[0],\n this.options.debugOptions.meshColor[1],\n this.options.debugOptions.meshColor[2],\n this.options.debugOptions.meshColor[3])\n : new Vector4(0, 0, 0, 0.0)\n });\n\n }\n\n private mapVal(x: number, inMin: number, inMax: number, outMin: number, outMax: number) {\n return (x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n }\n\n private isB3DGlasses(glasses: B3dAsset | GltfAsset) {\n return ('textures' in glasses);\n }\n\n public switchCubemap(maps: { px, nx, py, ny, pz, nz }) {\n return this.assetLoader.uploadCubeEnvMap([maps.px, maps.nx, maps.py, maps.ny, maps.pz, maps.nz])\n .then((map)=>{this.glasses.updateCubeMap(map)});\n }\n\n public switchEnvmap = (base64: string) => {\n return this.assetLoader.uploadEnvMap(base64)\n .catch(e => {\n console.error(e);\n throw e;\n })\n .then(this.updateEnvMap.bind(this));\n };\n\n}\n","import { mat4 } from 'gl-matrix';\nimport GeometryDataEngine from '../GeometryDataEngine';\nimport { Inspector } from '../Inspector';\n\nclass GlassesInspector {\n public static updateInspector(\n poseIndex: number,\n noseIndex: number,\n glassesRotation: number,\n glassesMatrices: { mvp: mat4; world: mat4; },\n geometryDataEngine: GeometryDataEngine\n ) {\n Inspector.addLine(poseIndex, 'poseIndex');\n Inspector.addLine(noseIndex, 'noseIndex');\n Inspector.addLine(glassesRotation, 'glassesRotation');\n let worldMatrixInspect = '';\n glassesMatrices.world.forEach((v) => {\n worldMatrixInspect = worldMatrixInspect + `${v} `;\n });\n Inspector.addLine(worldMatrixInspect, 'glassesWorld');\n Inspector.addLine(geometryDataEngine.getGlassesScale(), 'glassesScale');\n }\n}\n\nexport {\n GlassesInspector,\n};\n","/** @license React v17.0.2\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=60103,c=60106,d=60107,e=60108,f=60114,g=60109,h=60110,k=60112,l=60113,m=60120,n=60115,p=60116,q=60121,r=60122,u=60117,v=60129,w=60131;\nif(\"function\"===typeof Symbol&&Symbol.for){var x=Symbol.for;b=x(\"react.element\");c=x(\"react.portal\");d=x(\"react.fragment\");e=x(\"react.strict_mode\");f=x(\"react.profiler\");g=x(\"react.provider\");h=x(\"react.context\");k=x(\"react.forward_ref\");l=x(\"react.suspense\");m=x(\"react.suspense_list\");n=x(\"react.memo\");p=x(\"react.lazy\");q=x(\"react.block\");r=x(\"react.server.block\");u=x(\"react.fundamental\");v=x(\"react.debug_trace_mode\");w=x(\"react.legacy_hidden\")}\nfunction y(a){if(\"object\"===typeof a&&null!==a){var t=a.$$typeof;switch(t){case b:switch(a=a.type,a){case d:case f:case e:case l:case m:return a;default:switch(a=a&&a.$$typeof,a){case h:case k:case p:case n:case g:return a;default:return t}}case c:return t}}}var z=g,A=b,B=k,C=d,D=p,E=n,F=c,G=f,H=e,I=l;exports.ContextConsumer=h;exports.ContextProvider=z;exports.Element=A;exports.ForwardRef=B;exports.Fragment=C;exports.Lazy=D;exports.Memo=E;exports.Portal=F;exports.Profiler=G;exports.StrictMode=H;\nexports.Suspense=I;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return y(a)===h};exports.isContextProvider=function(a){return y(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return y(a)===k};exports.isFragment=function(a){return y(a)===d};exports.isLazy=function(a){return y(a)===p};exports.isMemo=function(a){return y(a)===n};\nexports.isPortal=function(a){return y(a)===c};exports.isProfiler=function(a){return y(a)===f};exports.isStrictMode=function(a){return y(a)===e};exports.isSuspense=function(a){return y(a)===l};exports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===v||a===e||a===l||a===m||a===w||\"object\"===typeof a&&null!==a&&(a.$$typeof===p||a.$$typeof===n||a.$$typeof===g||a.$$typeof===h||a.$$typeof===k||a.$$typeof===u||a.$$typeof===q||a[0]===r)?!0:!1};\nexports.typeOf=y;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar assign = require('./utils/assign');\nvar compose = require('redux').compose;\n\nfunction enhancer() {\n var config = arguments[0] || {};\n config.features = { pause: true, export: true, test: true };\n config.type = 'redux';\n if (config.autoPause === undefined) config.autoPause = true;\n if (config.latency === undefined) config.latency = 500;\n\n return function (createStore) {\n return function (reducer, preloadedState, enhancer) {\n var store = createStore(reducer, preloadedState, enhancer);\n var origDispatch = store.dispatch;\n\n var devTools = window.__REDUX_DEVTOOLS_EXTENSION__.connect(config);\n devTools.init(store.getState());\n\n var dispatch = function (action) {\n var r = origDispatch(action);\n devTools.send(action, store.getState());\n return r;\n };\n\n if (Object.assign) return Object.assign(store, { dispatch: dispatch });\n return assign(store, 'dispatch', dispatch);\n };\n };\n}\n\nfunction composeWithEnhancer(config) {\n return function () {\n return compose(compose.apply(null, arguments), enhancer(config));\n };\n}\n\nexports.__esModule = true;\nexports.composeWithDevTools = function () {\n if (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__) {\n if (arguments.length === 0) return enhancer();\n if (typeof arguments[0] === 'object')\n return composeWithEnhancer(arguments[0]);\n return composeWithEnhancer().apply(null, arguments);\n }\n\n if (arguments.length === 0) return undefined;\n if (typeof arguments[0] === 'object') return compose;\n return compose.apply(null, arguments);\n};\n\nexports.devToolsEnhancer =\n typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__\n ? enhancer\n : function () {\n return function (noop) {\n return noop;\n };\n };\n","'use strict';\n\nvar compose = require('redux').compose;\nvar logOnly = require('./logOnly');\n\nexports.__esModule = true;\nexports.composeWithDevTools =\n process.env.NODE_ENV === 'production'\n ? logOnly.composeWithDevTools\n : typeof window !== 'undefined' &&\n window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n : function () {\n if (arguments.length === 0) return undefined;\n if (typeof arguments[0] === 'object') return compose;\n return compose.apply(null, arguments);\n };\n\nexports.devToolsEnhancer =\n process.env.NODE_ENV === 'production'\n ? logOnly.devToolsEnhancer\n : typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__\n ? window.__REDUX_DEVTOOLS_EXTENSION__\n : function () {\n return function (noop) {\n return noop;\n };\n };\n","var objectKeys =\n Object.keys ||\n function (obj) {\n var keys = [];\n for (var key in obj) {\n if ({}.hasOwnProperty.call(obj, key)) keys.push(key);\n }\n return keys;\n };\n\nfunction assign(obj, newKey, newValue) {\n var keys = objectKeys(obj);\n var copy = {};\n\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n copy[key] = obj[key];\n }\n\n copy[newKey] = newValue;\n return copy;\n}\n\nmodule.exports = assign;\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n \"area\": true,\n \"base\": true,\n \"br\": true,\n \"col\": true,\n \"embed\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true,\n \"link\": true,\n \"meta\": true,\n \"param\": true,\n \"source\": true,\n \"track\": true,\n \"wbr\": true\n};\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}"],"names":["ActionContainer","styled","OptionsWrapper","OptionStyled","pxToEm","isActive","theme","palette","white","expand","media","small","Label","fonts","span","toggleText","Option","option","onChange","useState","setExpand","timer","useRef","useEffect","current","delay","clearTimeout","cbOnStart","useCallback","cbOnEnd","useAnimation","onClick","analytics","name","logo","label","LeftSideActions","optionActiveName","setActiveName","options","t","useTranslation","width","height","trackClickTransitionLens","trackClickTransitionColor","trackClickTransitionFrame","useLeftSideOptions","className","map","o","Fragment","swiperParams","slidesPerView","spaceBetween","centeredSlides","slideToClickedSlide","FrameCatalog","items","selectedUpc","selectedIndex","length","findIndex","el","upc","currentSlide","setCurrentSlide","isTooltipVisible","setTooltipVisibility","swiper","isReady","useVM","changeUpc","debounce","setTimeout","on","realIndex","off","frameColorLabel","lensColorLabel","visibility","initialSlide","getSwiper","swiperInstance","index","thumbnailUrl","src","crossOrigin","StyledCatalogItemInner","CatalogItemInner","StyledCatalogItem","CatalogItem","black","paragraph","StyledLensDescriptionWrapper","medium","CarouselWrapperStyled","CarouselWrapper","LENSES_MAP","type","description","LensCatalog","lenses","selectedLens","onChangeLens","lensTypes","obj","formatTranslationsByMap","returnObjects","selectedLensType","find","l","toLowerCase","selectedLensDescription","isLensesReady","setIsLensesReady","onLensChange","color","trackClickLensCarousel","handleClick","lens","c","update","getTransitionLensLabel","Carousel","products","activeName","currentProduct","currentColor","lensCatalog","currentLens","colorsCatalog","changeLens","setCurrentColor","ColorsCatalog","colors","selectedColor","onChangeColor","renderItems","attrRE","stringify","tag","res","voidElement","attrs","children","tagMatch","match","lookup","charAt","startsWith","endIndex","indexOf","comment","slice","reg","RegExp","result","exec","trim","attr","arr","split","lastIndex","substring","tagRE","whitespaceRE","empty","Object","create","buff","doc","content","key","push","join","reduce","parse","html","components","level","inComponent","end","replace","parent","isOpen","isComment","start","nextChar","parseTag","test","token","rootEl","es","unes","cape","m","_excluded","_excluded2","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","target","i","arguments","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","hasChildren","node","checkLength","base","props","getChildren","getAsArray","data","Array","isArray","nodesToString","i18nOptions","stringNode","childrenArray","keepArray","transSupportBasicHtmlNodes","transKeepBasicHtmlNodesFor","child","childIndex","concat","React","childPropsCount","shouldKeepChild","childChildren","i18nIsDynamicList","warn","_typeof","format","clone","_objectWithoutProperties","value","renderNodes","targetString","i18n","combinedTOpts","shouldUnescape","emptyChildrenButNeedsHandling","getData","childs","assign","ast","HTML","opts","renderInner","rootReactNode","mappedChildren","mapAST","prototype","toString","call","every","hasValidReactChildren","pushTranslatedJSX","inner","mem","isVoid","dummy","undefined","reactNode","astNode","reactNodes","un","translationContent","services","interpolator","interpolate","language","tmp","parseInt","newTarget","mergeProps","isElement","isValidTranslationWithChildren","isEmptyTransWithHTML","isKnownComponent","hasOwnProperty","_inner","Number","isNaN","parseFloat","_inner3","_inner4","wrapTextNodes","transWrapTextNodes","_content","Trans","_ref","count","i18nKey","context","_ref$tOptions","tOptions","values","defaults","ns","i18nFromProps","tFromProps","additionalProps","_ref2","useContext","I18nContext","i18nFromContext","defaultNSFromContext","defaultNS","getI18n","warnOnce","bind","k","reactI18nextOptions","getDefaults","react","namespaces","defaultValue","transEmptyNodeValue","hashTransKey","interpolationOverride","interpolation","prefix","suffix","useAsParent","defaultTransParent","ToggleBtn","resetButtonStyles","IconWrapper","TransitionIconWrapper","withText","css","Toggle","changeMenuVisibility","isTransitionActive","onToggle","trackClickTransitionView","CtaContainer","TransitionView","dispatch","useDispatch","useSelector","s","ui","isMenuVisible","vmProducts","selectedProduct","toggleTransitionActive","isTransition","setTransitionViewCarousel","isComplete","useAnimationApp","transitionFeature","useConfig","p","isEvolve","transitionLens","activePanel","transitionProducts","showTransitionToggler","useMemo","enabled","Overlay","QRCodeWrapper","QRCodeModalContent","CloseBtn","QRCodeModalTitle","qrCodeTitle","ProductName","Instructions","InstructionStep","silver","InstructionStepNumber","Text","QRCodeModal","productName","isQRCodeModalVisible","setQRCodeModalVisibility","fill","stroke","QRCode","ModalWindowContainer","large","ModalCloseButton","ModalContainer","TitleContainer","Title","titleSmall","AddPrescriptionLensesButton","Button","AddToCartButton","buttonTextLink","ButtonsContainer","AddPrescriptionModal","product","onAddPrescriptionLenses","addToCartText","addToCart","useAddToCart","useModal","isModalVisible","toggleModalVisibility","useAlternativePath","alternativeDecision","alternativeTitle","alternativeText","alternativeCtaTxt","alternativeBtn","handleAddPrescriptionLenses","handleAddToCart","Modal","visible","onOverlayClick","fromStore","VMProvider","isVMInitialized","isNoUpc","isEvolveProduct","setColors","Menu","hasMirrorRendered","enableWishlistCb","onQRCb","InitColorSwatches","FooterActions","showScreenshotIcon","Drawer","ScreenshotPreview","ErrorModal","message","PictureModeView","PictureModeProvider","onRefresh","VideoModeView","VideoModeProvider","VMRoutes","path","availableMode","element","AvailableMode","privacyPolicy","PrivacyPolicy","liveTryOn","ProtectedRoute","pictureMode","PictureMode","uploadInstructions","takePicture","TakePicture","takePictureInstructions","TakePictureInstructions","pictureModeView","pictureVideoModeError","PictureVideoError","videoMode","VideoMode","VideoScanInstructions","videoScan","VideoFaceScan","videoModeView","AnimationAppActions","restartMenuAnimation","resetMenuAnimation","useInitAnimationApp","App","wishlistedUpcs","i18nInstance","useI18nInstance","setWishlist","setVmProducts","resetUiState","I18nextProvider","config","store","ErrorBoundary","navigate","useNavigate","isPictureModeEnabled","isTryOnEnabled","isVideoModeEnabled","experience","isPrivacyAccepted","defaultExperience","VtoPage","clearPictureVideoIds","colorCode","isColorsReady","setIsColorReady","changeColor","trackClickColorCarousel","selectedColorLabel","colorName","swatchImage","bgImg","CatalogContainer","Image","CatalogItemWrapper","StyledLabel","StyledLabelColor","spanBold","ErrorBoundaryWrapper","whiteSmoke","headingSmall","state","error","trackGenericError","this","setState","Layout","VM_READY","ModalTitle","ModalMessage","isShow","setIsShow","onError","onClose","MainLoader","isAbsolute","FooterWrapper","FooterInner","FooterInnerStyled","FooterLabelWrapper","isAlignedLeft","FooterLabel","ProductLensName","paragraphSmall","AddToBagButton","PriceLine","PriceValue","PriceLabel","price","currency","currencySpacer","orders","currencySide","hasComma","text","dangerouslySetInnerHTML","__html","toFixed","Price","priceLineOrder","previous","reverse","id","ArrowRightIcon","viewBox","xmlns","d","isTakeScreenshotEnabled","onAddToBag","disableArrowIcon","disableCartIcon","useDownloadIcon","useCartIcon","lensType","isPreparingScreenshot","getScreenshot","isConfigurator","trackTakePhoto","useTakePhoto","isAlternativePath","currentProductPrice","truncatedProductName","truncateString","isDesktopView","size","rxAvailable","takeScreenShot","PhotoShareIcon","isLeftPhotoShareIcon","selectedLensColor","isMobileView","isIpadView","lensName","isProductNotAvailable","isArrowIcon","addToBagButton","vmInit","initializeVirtualMirror","colorSwatches","colorsData","VirtualMirrorCatalogue","glassesEnv","catalogueEnvironment","downloadTransitionColorCatalogue","then","transitionColors","colorData","clen","console","initVMRef","useRefValue","getColorSwatches","ButtonsWrapper","StyledContent","PrivacyContainer","TitleWrapper","CtaItems","withShadow","PrivacyPolicyWrapperStyled","PrivacyPolicyContentWrapper","withLabel","CloseIconWrapper","PrivacyPolicyWrapper","title","ctaContent","onCloseBtnClick","apiService","ApiService","vtoApiService","VtoApiService","api","generateAuthToken","post","getBipaContentUrls","headers","get","fetchData","url","fetch","raw","json","BipaModal","isBipaModalVisible","skip","locale","fallbackLanguage","useAsync","getAuthData","run","authData","isAuthLoading","loading","bipaContent","isBipaContentLoading","getBipa","bipa","isBipaLoading","rememberMe","Authorization","access_token","jsonUrl","JSON","bipaUrl","useBipaContent","setVisibilityBipaModal","Loading","ScreenDeviceWrapper","abbey","ScreenDeviceShapeWrapper","ScreenDeviceShapeHorizontal","darkGray","ScreenDeviceShapeVertical","ScreenDeviceText","ScreenDeviceArrowWrapper","lightgray","DocHeight","selector","isEffectRunning","container","document","querySelector","setHeight","style","window","innerHeight","requestAnimationFrame","useSetDocumentHeight","OrientationSreen","orientation","matchMedia","matches","isLandscape","setLandscape","handleOrientationChange","addEventListener","removeEventListener","useDeviceOrientation","trackClickButtonClose","closeVirtualMirror","PrivacyPolicyModal","isPrivacyPolicyModalVisible","setVisibilityPrivacyPolicyModal","TermsConditionsModal","isTermsConditionsVisible","setVisibilityTermsConditionsModal","normalize","LayoutStyled","ref","LAYOUT_ID","displayName","position","Loader","withLoadingText","AppLoader","withAppLoader","display","alignItems","justifyContent","minHeight","isDisabled","containerRef","isLoading","setIsLoading","observerCallback","_","observer","vmReady","getElementsByClassName","disconnect","MutationObserver","observe","childList","subtree","containerStyle","getComputedStyle","paddingTop","paddingBottom","ReactDOM","maxHeight","offsetHeight","LoaderCenter","LoaderWrapper","LoaderContent","Dash","LoadingText","heading","spinnerGrow","keyframes","Spin","VirtualMirror","CONTAINER_ID_LIVE_TRY_ON","closeVto","divId","VtoCore","MenuList","pathname","useLocation","isTakePictureEnabled","isUploadPictureEnabled","translationKey","route","analytic","trackClickMenuTryOn","active","trackClickMenuPicture","trackClickMenuVideo","getOptions","vtoPage","onUnmount","activeRoute","fn","setVtoPage","CONTAINER_ID_VIDEO_MODE","CONTAINER_ID_PICTURE_MODE","from","MenuButton","MenuOverlay","ListItem","InfoButton","Info","toggleVisibility","isVisible","onTermsAndConditions","onPrivacyPolicy","onBipa","isInfoVisible","setIsInfoVisible","setMenuVisibility","onMenuBtnClick","toggleInfoVisibility","MenuWrapper","MenuListWrapper","MenuOption","MenuLogo","ListText","TAKE_PICTURE_TIPS","icon","useFromPage","shadow","tip","CONTAINER_ID","region","environment","showScan","setShowScan","scanSuccess","setScanSuccess","vtoCaptureClose","onResCb","FrameAdvisorCapture","initOptions","appConfig","callbacks","onCaptureError","trackPicktureTakeFail","onCountdown","total","onAdvisorResult","setPictureId","videoId","onCaptureProcess","onLoading","onPrivacyFail","trackVmPrivacyFail","onPrivacyReject","trackVmPrivacyReject","privacy","termsAndConditions","localizationText","accessToken","refreshToken","initReturns","isSupported","showLoading","enableVto","enableMachineLearning","catch","onBackAction","textDescription","SpinnerWrapper","Spinner","FaceScanAppWrapper","ParagraphDescription","BlurBlock","Corner","FaceScanAppTarget","GradientBackground","GradientBackgroundPolygon","FaceScanAppContainer","acceptButton","primary","acceptButtonAfter","TryAgainButton","StyledDiv","ipad","secondary","tFunc","StyledError","ErrorLabel","pinkRed","SeeInstructions","StyledLink","PrivacyNotice","UPLOAD_CONTAINER","useUpload","isTipsVisible","setTipsVisible","setLoading","isError","setIsError","fileUploadRef","setFileUploadRef","uploadCtaContainer","setUploadCtaContainer","isInvalidImage","setIsInvalidImage","isFileChange","setIsFileChange","onFileChange","e","files","file","fileType","isValid","includes","fReader","FileReader","onload","img","readAsDataURL","toggleTipsVisible","fileUpload","ctaContainer","fileUploader","image","uploadDropZone","classList","contains","add","remove","buttonWrapper","closeFaCapture","generateUploadInitParams","renderUploadImage","seeInstructions","seePrivacyPolicyModal","UploadButton","onTermsAndConditionsClick","openTermsAndConditions","open","trackPicktureUploadFail","BackButton","sentence","keyword","parts","wrapTextWithTag","UPLOAD_TIPS","UploadInstructions","PictureModeEntryPage","location","isPrivacyCookieAcceptedFromFa","setPrivacyAcceptedCookie","onTakePicture","trackClickTakePicture","onUploadPicture","trackClickUploadPicture","getPictureId","centeredFlexColumn","PictureModeEntryPageWraper","PictureModeAction","ActionIconWrapper","ParagraphDescriptionCentered","TipsWrapper","TipUpload","TipTake","TipDescription","ErrorMessage","ConfirmButton","PictureVideoErrorWrapper","queryParams","search","URLSearchParams","useQueryParams","takeNew","errorMessage","getSource","tryAgain","to","vmApiService","VMApiService","generateHash","StyledQRCode","Analytics","Record","adobeSessionId","Optional","Union","String","Undefined","pagePlatform","pageBrand","storeId","sourcePosition","pageEnvironment","storeRegion","storeCompany","storeGlobalId","AvailableColor","Literal","Brand","logoUrl","TransitionLens","Boolean","defaultColor","defaultType","defaultAlphaLevel","availableColors","Product","code","brand","styleName","category","isCustom","Store","address","standAlone","countryId","globalStoreId","VtoMode","VMData","Null","vmmvModes","vmData","validateVMData","check","Error","qrCode","QRCodeStyling","qrOptions","mode","errorCorrectionLevel","dotsOptions","cornersDotOptions","cornersSquareOptions","encodeURIComponent","hash","append","QrCodeUi","RightSideActionsWrapper","ActionBtn","WishlistFilledIcon","fillRule","clipRule","strokeWidth","x","y","filterUnits","colorInterpolationFilters","floodOpacity","in","stdDeviation","in2","operator","Wishlist","onToggleWishlist","pending","setPending","wishlist","wishlisted","toggleWishlist","toggleWishlistAction","useWishlist","trackAddToWishlist","useAddToWishlist","disabled","Wrapper","SliderWrapper","RangeTrackStyled","RangeTrackSelectedStyled","RangeThumbStyled","LabelStyled","labelRef","opacity","LensActivationWithoutAnimation","lensActivation","onChangeLensOpacity","setLensActivation","changeLensOpacity","numbers","trackClickBrightnessBar","Range","direction","Direction","min","max","step","renderTrack","onMouseDown","onTouchStart","renderThumb","OPACITY_STEP","LensActivation","animationName","setAnimationName","decreaseOpacity","onEnd","increaseOpacity","useInterval","RightSideActions","isQrCodeEnabled","isShowFavToggle","isShowRefresh","isShowQR","showTransitionsSlider","ctaCnt","cnt","colorMap","sunglasshut","sgh","lc","opsm","oo","rb","sv","mk","avenir","m4c","getColorFromStyle","infoColor","fontMap","getFontFromStyle","getNoCacheBrandUrl","IMAGE_TYPE","createImage","Promise","resolve","reject","onerror","wrapText","maxWidth","lineHeight","lines","words","line","metrics","measureText","splice","substr","createScreenshotCanvas","screenshot","isMonobrand","alternativeThumbnailUrl","font","standAloneStore","hasTemplateStyle","noCacheBrandUrl","brandLogoUrl","brandName","productURL","all","imgURI","brandLogoEl","thumbnailEl","screenshotEl","getElementById","offsetWidth","objectFit","baseWidth","canvasW","canvasH","screenshotX","screenshotY","screenshotW","screenshotH","padding","modelNamePadding","isSmallMobileView","realWrapperWidth","textH","realWrapperHeight","cvs","createElement","ctx","getContext","textBaseline","fillStyle","fillRect","drawImage","modelNameFontSize","modelInfoFontSize","brandDrawWidth","brandDrawHeight","brandLogoHeight","brandLogoContainer","ratio","lensDrawWidth","lensDrawHeight","lensLogoHeight","lensLogoPad","modelNameLines","lensInfoText","textLines","subtextLens","wrapperContentTopPositionLensText","wrapperHeight","contentX","subTextLensMap","h","fillText","modelNameY","brandHorPos","brandVertPos","lensHorPos","downloadCanvas","screenshotCanvas","dataUrl","toDataURL","anchor","filename","download","href","body","appendChild","click","removeChild","saveScreenshot","ImageWrapper","StyledImage","ScreenshotImage","imageLoading","setImageLoading","onLoad","BackBtn","ProductInfo","BrandImage","ActionBox","ActionStyled","ActionWrapper","ButtonWrapper","ActionButton","ScreenshotWrapper","setImage","onShare","disableSavePolaroid","polaroid","linkA","linkB","setError","imgDataUrl","setImgDataUrl","getImgDataUrl","screenShot","share","navigator","shareData","Blob","File","sharedUrl","addAnalyticsQueryParam","log","useShare","trackSharePhoto","useSharePhoto","onSave","trackClickSaveImg","onShareUrl","disableSave","disableShare","isValidHttpUrl","VMInitialize","setIsReady","setIsVMInitialized","onDisplayPage","vmInitParams","onPrivacyAgree","bipaPrefill","privacyOptions","bipaActive","checkIsRegionUS","getRegion","analyticsConfig","onGlassesOn","onGlassesOff","onInitializeError","trackVmInitClientError","onWebcamDenied","trackVmWebcamUnaccessible","onWebcamUnavailable","trackVmWebcamUnavailable","onMirrorWasmFailure","trackVmWasmUnsupported","onGlassesRemovalStateChange","trackGR","channel","sessionTimeout","privacyCallbacks","page","bipaFormData","setIsPrivacyAccepted","useVmInitParams","VideoModeContainer","textCentered","isDone","ArrowsContainer","Arrow","toRight","animationIndex","StyledCounter","STEPS","ARROWS_ITEMS","setIsDone","counter","setCounter","currentStep","setCurrentStep","trackVideoTakeFail","setVideoId","onVtoCaptureStep","recordingStatus","VideoScanInstructionPageWraper","VideoScanTipsWrapper","Tip","VIDEO_SCAN_TIPS","onConfirm","getVideoId","StickyButton","bgColor","BackButtonWrapper","onClickBack","StyledButton","disable","DrawerContainer","fullscreen","DrawerOverlay","showOverlay","DrawerBaseContainer","unmountOnExit","CSSTransition","classNames","appear","timeout","divEl","usePortalDiv","AlertIcon","CloseIcon","clipPath","NavBarActionScan","NavBarActionVideo","NavBarActionPicture","cx","cy","r","WishlistIcon","RefreshIcon","ChooseLensIcon","ChooseColorIcon","ChooseFrameIcon","LightIcon","LightLessIcon","strokeLinecap","strokeLinejoin","CameraIcon","UploadIcon","FaceShapeIcon","SunIcon","CaretLeftIcon","CartIcon","ShareIcon","SaveIcon","InfoIcon","FocusIcon","ArrowIcon","QRCodeIcon","RotateIcon","RotateIconDesktop","MenuOpen","transform","MenuClose","CloseScreenshotIcon","CheckIcon","strokeMiterlimit","points","RelaxFaceIcon","EyeglassesOffIcon","HoldDeviceIcon","TransitionIconReduced","x1","y1","x2","y2","gradientUnits","stopColor","offset","TransitionsIcon","marginLeft","marginRight","TurnFaceIcon","ModalWindowOverlay","ModalBaseContainer","toTop","toBottom","OverlayWrapper","BGEnum","ColorEnum","StickyWrapper","OkCTA","txtColor","prices","alternativeDecisionPath","onAlternativeDecisionPath","cta","titleKey","textKey","ctaKey","titleTxt","descTxt","ctaTxt","animationApp","shallowEqual","currentAnimation","animationQueue","setAnimation","animation","setCurrentAnimation","completeAnimation","setCompleteAnimation","setNextAnimation","next","firstAnimation","conditionStart","conditionEnd","time","isAnimationMatch","getFunction","setData","getSelectorDimensions","useDimensions","elem","selectorDimensions","setSelectorDimensions","debouncedHandleResize","callback","savedCallback","interval","setInterval","clearInterval","setModalVisibility","OverlayContainer","useMoveGlassObserver","showClassName","moveGlassesObserver","overlay","isMoveGlassesShow","attributes","setDivEl","layout","portalElement","useVirtualMirrorApp","setIsPreparingScreenshot","isProductLoaded","setIsProductLoaded","useScreenshot","setIsConfigurator","upcs","getIsUpcSupported","filteredProducts","isUpcSupportedImproved","catalogueUpcs","availableList","isAvailable","getUpc","useUpcAvailability","setCurrentProduct","setColorsCatalog","setCurrentLens","setLensCatalog","userId","setUserID","setTransitionActive","isSelected","uniq","availColors","getAvailableColors","filteredLenses","some","notUndefined","filteredColors","colorsFilterByLens","colorsFiltered","createClassOnDemand","ClassOrObject","isResourceLanguage","I18NextMergeBackend","backends","merge","init","i18nextOptions","b","backendOption","backendOptions","namespace","backend","read","err","save","results","validResults","mergedResult","languages","fallbackValue","DEFAULT_NS","getResourceUrl","env","ACCEPTANCE","STAGING","PRODUCTION","getEnv","baseUrl","initI18n","i18next","lng","fallbackLng","debug","load","escapeValue","getInitConfig","pictureId","isPrivacyCookieAccepted","backendConfig","HttpBackend","u","loadPath","debounceInterval","use","Backend","initReactI18next","resources","useSuspense","useTranslationInit","isTranslationLoaded","setIsTranslationLoaded","initTranslation","fallbackLocale","fetchTranslation","fetchFallback","getResourceBundle","resourceData","mergeTranslation","addResourceBundle","getVmVersion","params","origin","query","addQueryParamsToUrl","executedList","executeOnce","cb","hasBeenExecuted","returnedValue","takeMode","valueTypes","ids","sources","frameTypes","sections","getCategory","formatAnalyticsProducts","acc","pr","Category","FrameType","track","trace","tealium_data2track","trackAttribute","trackClientError","Error_Source","Vm_Release","trackUserError","trackEvent","trackServerError","sendtrackData","method","getCommonData","event","tealium_account","tealium_profile","tealium_datasource","tealium_event","tealium_visitor_id","utag_data","tealium_session_id","page_environment","Page_Environment","utag_env","page_platform","Page_Platform","utag_plt","page_brand","Page_Brand","utag_brnd","country_code","Page_Country","utag_strrgn","domain","hostname","store_id","Store_Id","utag_strid","getEventData","formattedEventData","product_id","product_category","product_frametype","formatEventData","commonData","take_mode","vm_version","trackClickComponentData","clickData","click_label","getClickData","trackEventComponentData","eventData","trackErrorComponentData","details","errorData","error_source","error_code","error_details","getErrorData","Error_Code","Error_Details","data_element_id","data_analytics_available_call","formattedProduct","Events_ProdFavAdd","Take_Mode","Products","trackEventAddToWishlist","Events_VMScreenshot","trackEventTakePhoto","Events_SocialShare","trackEventSharePhoto","trackFitGlasses","Events_VMFit","trackEventFitGlasses","trackImpressionInitVM","Page_Section1","Page_Section2","Events_VMRender","pathToTakeMode","useTakeMode","trackClickAddToWishlist","trackClickShareSocial","useFitGlasses","useTrackInitVM","formattedProducts","trackInitVM","pxValue","str","num","isDesktopBrowser","userAgent","innerWidth","platform","maxTouchPoints","validateUrl","URL","protocol","PrivacyPolicyContainer","paragraphBold","PrivacyHeader","CloseLineIcon","PRIVACY_POLICY_CONTAINER","isDisplay","setIsDisplay","isBipaConsent","setIsBipaConsent","renderParams","glasses","render","noUpc","zIndex","StyledContainer","headingMediumBold","VMContext","vmHook","transitionColor","video","Provider","VtoInitialize","onRenderFailure","onSuccess","useVtoInitParams","initializeVto","vtoEnv","PhotoModeContainer","RotationIconContainer","RotationTip","PictureModeElem","VideoModeElem","isRotateIconVisible","setRotateIconVisible","iconShowTimes","setIconShowTimes","MainVtoProvider","nosePositionTouches","VtoProvider","vtoContainer","dimensions","renderVto","showRotateBar","w","clearPictureId","clearVideoId","withVideo","closeVideoMode","closePictureMode","ConfigContext","createContext","ApiError","apiUrl","accept","_retrieveData","ok","statusText","status","SET_CURRENT_ANIMATION","SET_COMPLETE_ANIMATION","RESTART_MENU_ANIMATION","payload","SET_LENS","SET_PRODUCT","SET_LENSES_LIST","setLens","setProduct","setLensList","lensesList","SET_IS_PRIVACY_ACCEPTED","SET_VM_PRODUCTS","SET_VISIBILITY_TERMS_CONDITIONS_MODAL","SET_VISIBILITY_PRIVACY_POLICY_MODAL","SET_VISIBILITY_BIPA_MODAL","SET_QR_CODE_MODAL_VISIBILITY","SET_TRANSITION_VIEW_CAROUSEL","SET_MENU_VISIBILITY","SET_MODAL_VISIBILITY","SET_VTO_PAGE","RESET_UI_STATE","TOGGLE_WISHLIST","SET_WISHLIST","composeWithDevTools","initialState","action","queue","q","currentAnim","isMenuAnim","Set","newWishlist","rootReducer","combineReducers","configurator","LOCAL_STATE_VAR_NAME","saveState","serializedState","localStorage","setItem","getItem","loadState","require","composedEnhancers","compose","applyMiddleware","initState","createStore","initStore","reducers","prevState","subscribe","currState","getState","stateHasChanged","hasChanged","reducer","persistReducers","GlobalStyles","createGlobalStyle","device","gray","blueberry","dodgerblue","main","light","buttonText","typography","ML_PROCESS_IMAGE_CONSENT","cookie","getCookie","field","cookieArr","cookieObj","newl","availableClens","identifier","isClen","filterColors","findColor","currentRegion","BIPA_REGION_VALUES","where","item","stepId","_vector1","Vector3","_vector2","_normalMatrix","Matrix3","Plane","normal","constant","isPlane","copy","z","set","point","dot","a","subVectors","cross","setFromNormalAndCoplanarPoint","plane","inverseNormalLength","multiplyScalar","negate","sphere","distanceToPoint","center","radius","delta","denominator","startSign","endSign","box","intersectsPlane","matrix","optionalNormalMatrix","normalMatrix","getNormalMatrix","referencePoint","coplanarPoint","applyMatrix4","applyMatrix3","equals","constructor","_sphere","Sphere","_vector","Frustum","p0","p1","p2","p3","p4","p5","planes","frustum","me","elements","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","setComponents","geometry","boundingSphere","computeBoundingSphere","matrixWorld","intersectsSphere","sprite","negRadius","WebGLAttributes","gl","capabilities","isWebGL2","buffers","WeakMap","attribute","isInterleavedBufferAttribute","deleteBuffer","buffer","delete","bufferType","isGLBufferAttribute","cached","version","bytesPerElement","elementSize","array","usage","createBuffer","bindBuffer","bufferData","onUploadCallback","Float32Array","FLOAT","Uint16Array","isFloat16BufferAttribute","HALF_FLOAT","UNSIGNED_SHORT","Int16Array","SHORT","Uint32Array","UNSIGNED_INT","Int32Array","INT","Int8Array","BYTE","Uint8Array","UNSIGNED_BYTE","Uint8ClampedArray","BYTES_PER_ELEMENT","updateRange","bufferSubData","subarray","updateBuffer","WebGLBindingStates","extensions","maxVertexAttributes","getParameter","MAX_VERTEX_ATTRIBS","extension","vaoAvailable","bindingStates","defaultState","createBindingState","currentState","forceUpdate","bindVertexArrayObject","vao","bindVertexArray","bindVertexArrayOES","deleteVertexArrayObject","deleteVertexArray","deleteVertexArrayOES","newAttributes","enabledAttributes","attributeDivisors","program","wireframe","initAttributes","il","enableAttribute","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","disableUnusedAttributes","disableVertexAttribArray","vertexAttribPointer","normalized","stride","vertexAttribIPointer","reset","resetDefaultState","setup","material","updateBuffers","programMap","stateMap","createVertexArray","createVertexArrayOES","getBindingState","cachedAttributes","geometryAttributes","attributesNum","programAttributes","getAttributes","cachedAttribute","geometryAttribute","instanceMatrix","instanceColor","needsUpdate","cache","saveCache","ELEMENT_ARRAY_BUFFER","isInstancedMesh","isInstancedBufferGeometry","materialDefaultAttributeValues","defaultAttributeValues","programAttribute","itemSize","isInstancedInterleavedBuffer","locationSize","_maxInstanceCount","ARRAY_BUFFER","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","setupVertexAttributes","dispose","geometryId","programId","releaseStatesOfGeometry","releaseStatesOfProgram","WebGLBufferRenderer","info","setMode","drawArrays","renderInstances","primcount","methodName","WebGLCapabilities","parameters","maxAnisotropy","getMaxPrecision","precision","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","MEDIUM_FLOAT","WebGL2RenderingContext","WebGL2ComputeRenderingContext","maxPrecision","drawBuffers","has","logarithmicDepthBuffer","maxTextures","MAX_TEXTURE_IMAGE_UNITS","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","maxCubemapSize","MAX_CUBE_MAP_TEXTURE_SIZE","maxAttributes","maxVertexUniforms","MAX_VERTEX_UNIFORM_VECTORS","maxVaryings","MAX_VARYING_VECTORS","maxFragmentUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","vertexTextures","floatFragmentTextures","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","floatVertexTextures","maxSamples","MAX_SAMPLES","WebGLClipping","properties","scope","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","uniform","resetGlobalState","numPlanes","numIntersection","projectPlanes","camera","dstOffset","skipTransform","nPlanes","dstArray","flatSize","viewMatrix","matrixWorldInverse","i4","toArray","enableLocalClipping","beginShadows","endShadows","useCache","clippingPlanes","clipIntersection","clipShadows","materialProperties","nGlobal","lGlobal","clippingState","_segCenter","_segDir","_diff","_edge1","_edge2","_normal","Ray","ray","v","sub","at","directionDistance","Math","sqrt","distanceSqToPoint","distanceToSquared","v0","v1","optionalPointOnRay","optionalPointOnSegment","s0","s1","sqrDist","extDet","segExtent","distanceTo","a01","b0","b1","lengthSq","det","abs","invDet","tca","d2","radius2","thc","t0","t1","distanceToPlane","distToPoint","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectBox","backfaceCulling","crossVectors","sign","DdN","DdQxE2","DdE1xQ","QdN","matrix4","transformDirection","_v0","_v1","_v2","_v3","_vab","_vac","_vbc","_vap","_vbp","_vcp","Triangle","i0","i1","i2","fromBufferAttribute","triangle","addVectors","getNormal","setFromCoplanarPoints","getBarycoord","uv1","uv2","uv3","getUV","containsPoint","isFrontFacing","intersectsTriangle","d1","d3","d4","vc","addScaledVector","d5","d6","vb","va","denom","targetLengthSq","dot00","dot01","dot02","dot11","dot12","invDenom","materialId","Material","isMaterial","uuid","MathUtils","blending","NormalBlending","side","FrontSide","vertexColors","transparent","blendSrc","SrcAlphaFactor","blendDst","OneMinusSrcAlphaFactor","blendEquation","AddEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","LessEqualDepth","depthTest","depthWrite","stencilWriteMask","stencilFunc","AlwaysStencilFunc","stencilRef","stencilFuncMask","stencilFail","KeepStencilOp","stencilZFail","stencilZPass","stencilWrite","shadowSide","colorWrite","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaToCoverage","premultipliedAlpha","toneMapped","userData","_alphaTest","onBeforeCompile","newValue","currentValue","isColor","isVector3","meta","isRootObject","textures","images","metadata","generator","extractFromCache","getHex","roughness","metalness","sheen","sheenColor","sheenRoughness","emissive","emissiveIntensity","specular","specularIntensity","specularColor","shininess","clearcoat","clearcoatRoughness","clearcoatMap","isTexture","toJSON","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","iridescence","iridescenceIOR","iridescenceThicknessRange","iridescenceMap","iridescenceThicknessMap","matcap","alphaMap","lightMap","lightMapIntensity","aoMap","aoMapIntensity","bumpMap","bumpScale","normalMap","normalMapType","normalScale","displacementMap","displacementScale","displacementBias","roughnessMap","metalnessMap","emissiveMap","specularMap","specularIntensityMap","specularColorMap","envMap","combine","envMapIntensity","reflectivity","refractionRatio","gradientMap","transmission","transmissionMap","thickness","thicknessMap","attenuationDistance","Infinity","attenuationColor","sizeAttenuation","rotation","linewidth","dashSize","gapSize","scale","alphaTest","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","flatShading","fog","srcPlanes","dstPlanes","n","dispatchEvent","EventDispatcher","SRGBToLinear","pow","LinearToSRGB","FN","SRGBColorSpace","LinearSRGBColorSpace","ColorManagement","legacyMode","workingColorSpace","colorSpace","convert","sourceColorSpace","targetColorSpace","g","fromWorkingColorSpace","toWorkingColorSpace","_colorKeywords","_rgb","_hslA","_hslB","hue2rgb","toComponents","Color","setRGB","setHex","setStyle","scalar","hex","floor","euclideanModulo","clamp","handleAlpha","string","setHSL","setColorName","copySRGBToLinear","copyLinearToSRGB","hue","saturation","lightness","getHSL","color1","color2","alpha","lerp","getX","getY","getZ","Symbol","iterator","NAMES","MeshBasicMaterial","isMeshBasicMaterial","MultiplyOperation","setValues","_inverseMatrix","Matrix4","_ray","_vA","_vB","_vC","_tempA","_tempB","_tempC","_morphA","_morphB","_morphC","_uvA","Vector2","_uvB","_uvC","_intersectionPoint","_intersectionPointWorld","Mesh","BufferGeometry","isMesh","updateMorphTargets","recursive","morphTargetInfluences","morphTargetDictionary","morphAttributes","morphAttribute","ml","raycaster","intersects","invert","boundingBox","intersectsBox","intersection","morphPosition","morphTargetsRelative","uv","groups","drawRange","group","groupMaterial","materialIndex","j","jl","checkBufferGeometryIntersection","faceIndex","face","Object3D","morphInfluences","influence","isSkinnedMesh","boneTransform","pA","pB","pC","BackSide","intersectTriangle","DoubleSide","distance","near","far","checkIntersection","BoxGeometry","depth","widthSegments","heightSegments","depthSegments","indices","vertices","normals","uvs","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","vector","iy","ix","addGroup","setIndex","setAttribute","Float32BufferAttribute","cloneUniforms","dst","property","isMatrix3","isMatrix4","isVector2","isVector4","isQuaternion","mergeUniforms","uniforms","merged","_canvas","UniformsUtils","ShaderMaterial","isShaderMaterial","defines","uniformsGroups","vertexShader","fragmentShader","lights","clipping","derivatives","fragDepth","shaderTextureLOD","index0AttributeName","uniformsNeedUpdate","glslVersion","cloneUniformsGroups","ImageUtils","HTMLCanvasElement","canvas","createElementNS","ImageData","putImageData","HTMLImageElement","ImageBitmap","imageData","getImageData","Source","isSource","output","isDataTexture","serializeImage","getDataURL","textureId","Texture","DEFAULT_IMAGE","mapping","DEFAULT_MAPPING","wrapS","ClampToEdgeWrapping","wrapT","magFilter","LinearFilter","minFilter","LinearMipmapLinearFilter","RGBAFormat","UnsignedByteType","anisotropy","encoding","LinearEncoding","mipmaps","internalFormat","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","onUpdate","isRenderTargetTexture","needsPMREMUpdate","setUvTransform","wrap","UVMapping","RepeatWrapping","MirroredRepeatWrapping","ceil","WebGLRenderTarget","isWebGLRenderTarget","scissor","Vector4","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","samples","Camera","isCamera","projectionMatrix","projectionMatrixInverse","updateWorldMatrix","force","updateParents","updateChildren","PerspectiveCamera","fov","aspect","isPerspectiveCamera","zoom","focus","view","filmGauge","filmOffset","updateProjectionMatrix","focalLength","vExtentSlope","getFilmHeight","atan","tan","fullWidth","fullHeight","offsetX","offsetY","top","left","skew","getFilmWidth","makePerspective","CubeCamera","renderTarget","cameraPX","layers","up","lookAt","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","renderer","scene","updateMatrixWorld","currentRenderTarget","getRenderTarget","currentToneMapping","toneMapping","currentXrEnabled","xr","NoToneMapping","setRenderTarget","CubeTexture","CubeReflectionMapping","isCubeTexture","WebGLCubeRenderTarget","isWebGLCubeRenderTarget","shader","tEquirect","NoBlending","mesh","currentMinFilter","stencil","clear","WebGLCubeMaps","cubemaps","mapTextureMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","CubeRefractionMapping","onTextureDispose","cubemap","fromEquirectangularTexture","OrthographicCamera","right","bottom","isOrthographicCamera","dx","dy","scaleW","scaleH","makeOrthographic","EXTRA_LOD_SIGMA","_flatCamera","_clearColor","_oldTarget","PHI","INV_PHI","_axisDirections","PMREMGenerator","_renderer","_pingPongRenderTarget","_lodMax","_cubeSize","_lodPlanes","_sizeLods","_sigmas","_blurMaterial","_cubemapMaterial","_equirectMaterial","_compileMaterial","sigma","_setSize","cubeUVRenderTarget","_allocateTargets","_sceneToCubeUV","_blur","_applyPMREM","_cleanup","equirectangular","_fromTexture","_getCubemapMaterial","_getEquirectMaterial","_dispose","cubeSize","log2","outputTarget","_setViewport","_textureToCubeUV","HalfFloatType","_createRenderTarget","lodMax","lodPlanes","sizeLods","sigmas","lod","totalLods","sizeLod","texelSize","cubeFaces","positionSize","uvSize","faceIndexSize","coordinates","BufferAttribute","_createPlanes","weights","poleAxis","_getBlurShader","tmpMesh","compile","cubeCamera","upSign","forwardSign","originalAutoClear","autoClear","getClearColor","backgroundMaterial","backgroundBox","useSolidColor","background","col","flipEnvMap","lodIn","lodOut","pingPongRenderTarget","_halfBlur","targetIn","targetOut","sigmaRadians","blurMaterial","blurMesh","blurUniforms","pixels","radiansPerPixel","isFinite","PI","sigmaPixels","sum","weight","exp","outputSize","CubeUVReflectionMapping","WebGLCubeUVMaps","cubeUVmaps","pmremGenerator","cubemapUV","isEquirectMap","isCubeMap","fromEquirectangular","fromCubemap","isCubeTextureComplete","WebGLExtensions","getExtension","WebGLGeometries","geometries","wireframeAttributes","onGeometryDispose","memory","updateWireframeAttribute","geometryIndex","geometryPosition","arrayNeedsUint32","Uint32BufferAttribute","Uint16BufferAttribute","previousAttribute","getWireframeAttribute","currentAttribute","WebGLIndexedBufferRenderer","drawElements","WebGLInfo","frame","calls","triangles","programs","autoReset","instanceCount","TRIANGLES","LINES","LINE_STRIP","LINE_LOOP","POINTS","WebGLObjects","updateMap","onInstancedMeshDispose","instancedMesh","buffergeometry","hasEventListener","DataArrayTexture","isDataArrayTexture","NearestFilter","wrapR","Data3DTexture","isData3DTexture","emptyTexture","emptyArrayTexture","empty3dTexture","emptyCubeTexture","arrayCacheF32","arrayCacheI32","mat4array","mat3array","mat2array","flatten","nBlocks","blockSize","firstElem","arraysEqual","copyArray","allocTexUnits","allocateTextureUnit","setValueV1f","uniform1f","addr","setValueV2f","uniform2f","uniform2fv","setValueV3f","uniform3f","uniform3fv","setValueV4f","uniform4f","uniform4fv","setValueM2","uniformMatrix2fv","setValueM3","uniformMatrix3fv","setValueM4","uniformMatrix4fv","setValueV1i","uniform1i","setValueV2i","uniform2i","uniform2iv","setValueV3i","uniform3i","uniform3iv","setValueV4i","uniform4i","uniform4iv","setValueV1ui","uniform1ui","setValueV2ui","uniform2ui","uniform2uiv","setValueV3ui","uniform3ui","uniform3uiv","setValueV4ui","uniform4ui","uniform4uiv","setValueT1","unit","setTexture2D","setValueT3D1","setTexture3D","setValueT6","setTextureCube","setValueT2DArray1","setTexture2DArray","setValueV1fArray","uniform1fv","setValueV2fArray","setValueV3fArray","setValueV4fArray","setValueM2Array","setValueM3Array","setValueM4Array","setValueV1iArray","uniform1iv","setValueV2iArray","setValueV3iArray","setValueV4iArray","setValueV1uiArray","uniform1uiv","setValueV2uiArray","setValueV3uiArray","setValueV4uiArray","setValueT1Array","units","setValueT3DArray","setValueT6Array","setValueT2DArrayArray","SingleUniform","activeInfo","setValue","getSingularSetter","PureArrayUniform","getPureArraySetter","StructuredUniform","seq","RePathPart","addUniform","uniformObject","parseUniform","pathLength","matchEnd","idIsIndex","subscript","WebGLUniforms","getProgramParameter","ACTIVE_UNIFORMS","getActiveUniform","getUniformLocation","WebGLShader","createShader","shaderSource","compileShader","ShaderChunk","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","alphatest_pars_fragment","aomap_fragment","aomap_pars_fragment","begin_vertex","beginnormal_vertex","bsdfs","iridescence_fragment","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","common","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_common_pars_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_physical_pars_fragment","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_fragment","lightmap_pars_fragment","lights_lambert_fragment","lights_lambert_pars_fragment","lights_pars_begin","lights_toon_fragment","lights_toon_pars_fragment","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_fragment_begin","lights_fragment_maps","lights_fragment_end","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphcolor_vertex","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment_begin","normal_fragment_maps","normal_pars_fragment","normal_pars_vertex","normal_vertex","normalmap_pars_fragment","clearcoat_normal_fragment_begin","clearcoat_normal_fragment_maps","clearcoat_pars_fragment","iridescence_pars_fragment","output_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","transmission_fragment","transmission_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","background_vert","background_frag","backgroundCube_vert","backgroundCube_frag","cube_vert","cube_frag","depth_vert","depth_frag","distanceRGBA_vert","distanceRGBA_frag","equirect_vert","equirect_frag","linedashed_vert","linedashed_frag","meshbasic_vert","meshbasic_frag","meshlambert_vert","meshlambert_frag","meshmatcap_vert","meshmatcap_frag","meshnormal_vert","meshnormal_frag","meshphong_vert","meshphong_frag","meshphysical_vert","meshphysical_frag","meshtoon_vert","meshtoon_frag","points_vert","points_frag","shadow_vert","shadow_frag","sprite_vert","sprite_frag","programIdCount","getShaderErrors","getShaderParameter","COMPILE_STATUS","errors","getShaderInfoLog","errorMatches","errorLine","toUpperCase","lines2","handleSource","getShaderSource","getTexelEncodingFunction","functionName","sRGBEncoding","getEncodingComponents","getToneMappingFunction","toneMappingName","LinearToneMapping","ReinhardToneMapping","CineonToneMapping","ACESFilmicToneMapping","CustomToneMapping","filterEmptyLine","replaceLightNums","numSpotLightCoords","numSpotLightShadows","numSpotLightMaps","numSpotLightShadowsWithMaps","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","numDirLightShadows","numPointLightShadows","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","includePattern","resolveIncludes","includeReplacer","include","unrollLoopPattern","unrollLoops","loopReplacer","snippet","generatePrecision","precisionstring","WebGLProgram","cacheKey","prefixVertex","prefixFragment","shadowMapTypeDefine","shadowMapType","PCFShadowMap","PCFSoftShadowMap","VSMShadowMap","generateShadowMapTypeDefine","envMapTypeDefine","envMapMode","generateEnvMapTypeDefine","envMapModeDefine","generateEnvMapModeDefine","envMapBlendingDefine","MixOperation","AddOperation","generateEnvMapBlendingDefine","envMapCubeUVSize","imageHeight","envMapCubeUVHeight","maxMip","texelHeight","texelWidth","generateCubeUVSize","customExtensions","extensionDerivatives","tangentSpaceNormalMap","shaderID","extensionFragDepth","rendererExtensionFragDepth","extensionDrawBuffers","rendererExtensionDrawBuffers","extensionShaderTextureLOD","rendererExtensionShaderTextureLod","generateExtensions","customDefines","chunks","generateDefines","createProgram","versionString","isRawShaderMaterial","shaderName","instancing","instancingColor","supportsVertexTextures","useFog","fogExp2","objectSpaceNormalMap","sheenColorMap","sheenRoughnessMap","vertexTangents","vertexAlphas","vertexUvs","uvsVertexOnly","skinning","morphTargets","morphNormals","morphColors","morphTargetsCount","morphTextureStride","doubleSided","flipSided","shadowMapEnabled","decodeVideoTexture","physicallyCorrectLights","opaque","outputEncoding","useDepthPacking","depthPacking","GLSL3","cachedUniforms","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","checkShaderErrors","programLog","getProgramInfoLog","vertexLog","fragmentLog","runnable","haveDiagnostics","LINK_STATUS","vertexErrors","fragmentErrors","getError","VALIDATE_STATUS","diagnostics","deleteShader","getUniforms","ACTIVE_ATTRIBUTES","getActiveAttrib","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","getAttribLocation","fetchAttributeLocations","destroy","deleteProgram","usedTimes","_id","WebGLShaderCache","shaderCache","Map","materialCache","vertexShaderStage","_getShaderStage","fragmentShaderStage","materialShaders","_getShaderCacheForMaterial","shaderStage","stage","WebGLShaderStage","UniformsLib","diffuse","uvTransform","uv2Transform","specularmap","envmap","ior","aomap","lightmap","emissivemap","bumpmap","normalmap","displacementmap","roughnessmap","metalnessmap","gradientmap","fogDensity","fogNear","fogFar","fogColor","ambientLightColor","lightProbe","directionalLights","directionalLightShadows","shadowBias","shadowNormalBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotLightShadows","spotLightMap","spotShadowMap","spotLightMatrix","pointLights","pointLightShadows","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","ltc_1","ltc_2","ShaderLib","basic","lambert","phong","standard","toon","dashed","totalSize","t2D","backgroundCube","backgroundBlurriness","cube","tCube","tFlip","equirect","distanceRGBA","referencePosition","nearDistance","farDistance","WebGLPrograms","cubeuvmaps","_programLayers","Layers","_customShaders","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","MeshMatcapMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","SpriteMaterial","getParameters","shadows","isMeshStandardMaterial","customVertexShaderID","customFragmentShaderID","getVertexShaderID","getFragmentShaderID","useAlphaTest","useClearcoat","useIridescence","isXRRenderTarget","ObjectSpaceNormalMap","TangentSpaceNormalMap","isVideoTexture","tangent","isFogExp2","directional","spot","rectArea","hemi","shadowMap","customProgramCacheKey","getProgramCacheKey","morphAttributeCount","getProgramCacheKeyParameters","disableAll","enable","mask","getProgramCacheKeyBooleans","acquireProgram","pl","preexistingProgram","releaseProgram","pop","releaseShaderCache","WebGLProperties","painterSortStable","groupOrder","renderOrder","reversePainterSortStable","WebGLRenderList","renderItemsIndex","transmissive","getNextRenderItem","renderItem","unshift","finish","sort","customOpaqueSort","customTransparentSort","WebGLRenderLists","lists","renderCallDepth","list","listArray","physical","iridescenceThicknessMinimum","iridescenceThicknessMaximum","transmissionSamplerSize","transmissionSamplerMap","isMeshDepthMaterial","BasicDepthPacking","isMeshDistanceMaterial","WebGLShadowMap","_objects","_capabilities","_frustum","_shadowMapSize","_viewportSize","_viewport","_depthMaterial","RGBADepthPacking","_distanceMaterial","_materialCache","_maxTextureSize","shadowMaterialVertical","VSM_SAMPLES","shadow_pass","resolution","shadowMaterialHorizontal","HORIZONTAL_PASS","fullScreenTri","fullScreenMesh","VSMPass","blurSamples","mapPass","mapSize","renderBufferDirect","getDepthMaterial","customMaterial","isPointLight","customDistanceMaterial","customDepthMaterial","keyA","keyB","materialsForVariant","cachedMaterial","setFromMatrixPosition","renderObject","shadowCamera","isLine","isPoints","castShadow","receiveShadow","frustumCulled","intersectsObject","modelViewMatrix","multiplyMatrices","kl","depthMaterial","autoUpdate","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","_state","setBlending","setClear","setTest","setScissorTest","shadowFrameExtents","getFrameExtents","multiply","pars","viewportCount","getViewportCount","vp","getViewport","updateMatrices","getFrustum","isPointLightShadow","WebGLState","colorBuffer","locked","currentColorMask","currentColorClear","setMask","colorMask","setLocked","lock","clearColor","currentDepthMask","currentDepthFunc","currentDepthClear","DEPTH_TEST","depthMask","setFunc","NeverDepth","NEVER","AlwaysDepth","ALWAYS","LessDepth","LESS","LEQUAL","EqualDepth","EQUAL","GreaterEqualDepth","GEQUAL","GreaterDepth","GREATER","NotEqualDepth","NOTEQUAL","clearDepth","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","STENCIL_TEST","stencilMask","setOp","stencilOp","clearStencil","uboBindings","uboProgamMap","enabledCapabilities","currentBoundFramebuffers","currentDrawbuffers","defaultDrawbuffers","currentProgram","currentBlendingEnabled","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","MAX_COMBINED_TEXTURE_IMAGE_UNITS","lineWidthAvailable","glVersion","VERSION","currentTextureSlot","currentBoundTextures","scissorParam","SCISSOR_BOX","viewportParam","VIEWPORT","currentScissor","fromArray","currentViewport","createTexture","bindTexture","texParameteri","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","texImage2D","RGBA","emptyTextures","TEXTURE_2D","TEXTURE_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","setFlipSided","setCullFace","CullFaceBack","CULL_FACE","equationToGL","FUNC_ADD","SubtractEquation","FUNC_SUBTRACT","ReverseSubtractEquation","FUNC_REVERSE_SUBTRACT","MinEquation","MIN","MaxEquation","MAX","MIN_EXT","MAX_EXT","factorToGL","ZeroFactor","ZERO","OneFactor","ONE","SrcColorFactor","SRC_COLOR","SRC_ALPHA","SrcAlphaSaturateFactor","SRC_ALPHA_SATURATE","DstColorFactor","DST_COLOR","DstAlphaFactor","DST_ALPHA","OneMinusSrcColorFactor","ONE_MINUS_SRC_COLOR","ONE_MINUS_SRC_ALPHA","OneMinusDstColorFactor","ONE_MINUS_DST_COLOR","OneMinusDstAlphaFactor","ONE_MINUS_DST_ALPHA","BLEND","CustomBlending","blendEquationSeparate","blendFuncSeparate","AdditiveBlending","blendFunc","SubtractiveBlending","MultiplyBlending","frontFace","CW","CCW","cullFace","CullFaceNone","BACK","CullFaceFront","FRONT","FRONT_AND_BACK","setPolygonOffset","factor","POLYGON_OFFSET_FILL","bindFramebuffer","framebuffer","DRAW_FRAMEBUFFER","FRAMEBUFFER","isWebGLMultipleRenderTargets","COLOR_ATTACHMENT0","drawBuffersWEBGL","useProgram","setMaterial","frontFaceCW","SAMPLE_ALPHA_TO_COVERAGE","setLineWidth","lineWidth","SCISSOR_TEST","activeTexture","webglSlot","TEXTURE0","webglType","webglTexture","boundTexture","unbindTexture","compressedTexImage2D","compressedTexImage3D","texImage3D","updateUBOMapping","uniformsGroup","blockIndex","getUniformBlockIndex","uniformBlockBinding","__bindingPointIndex","texStorage2D","texStorage3D","texSubImage2D","texSubImage3D","compressedTexSubImage2D","compressedTexSubImage3D","KEEP","READ_FRAMEBUFFER","WebGLTextures","_gl","utils","multisampledRTTExt","supportsInvalidateFramebuffer","_videoTextures","_sources","useOffscreenCanvas","OffscreenCanvas","createCanvas","resizeImage","needsPowerOfTwo","needsNewCanvas","maxSize","isPowerOfTwo","textureNeedsGenerateMipmaps","supportsMips","generateMipmap","getInternalFormat","internalFormatName","glFormat","glType","forceLinearEncoding","RED","R32F","R16F","R8","RG","RG32F","RG16F","RG8","RGBA32F","RGBA16F","SRGB8_ALPHA8","RGBA8","UNSIGNED_SHORT_4_4_4_4","RGBA4","UNSIGNED_SHORT_5_5_5_1","RGB5_A1","getMipLevels","isFramebufferTexture","isCompressedTexture","filterFallback","f","NearestMipmapNearestFilter","NearestMipmapLinearFilter","LINEAR","textureProperties","__webglInit","webglTextures","__cacheKey","deleteTexture","deallocateTexture","onRenderTargetDispose","renderTargetProperties","__webglTexture","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","__webglMultisampledFramebuffer","__webglColorRenderbuffer","__webglDepthRenderbuffer","attachmentProperties","deallocateRenderTarget","textureUnits","slot","updateVideoTexture","__version","complete","uploadTexture","wrappingToGL","REPEAT","CLAMP_TO_EDGE","MIRRORED_REPEAT","filterToGL","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LinearMipmapNearestFilter","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","setTextureParameters","textureType","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_3D","TEXTURE_2D_ARRAY","TEXTURE_WRAP_R","FloatType","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","initTexture","forceUpload","textureCacheKey","getTextureCacheKey","isCompressedArrayTexture","sourceProperties","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","UNPACK_COLORSPACE_CONVERSION_WEBGL","NONE","mipmap","textureNeedsPowerOfTwo","verifyColorSpace","glInternalFormat","useTexStorage","allocateMemory","levels","isDepthTexture","DEPTH_COMPONENT","DEPTH_COMPONENT32F","UnsignedIntType","DEPTH_COMPONENT24","UnsignedInt248Type","DEPTH24_STENCIL8","DEPTH_COMPONENT16","DepthFormat","UnsignedShortType","DepthStencilFormat","DEPTH_STENCIL","setupFrameBufferTexture","attachment","textureTarget","__hasExternalTextures","useMultisampledRTT","framebufferTexture2DMultisampleEXT","getRenderTargetSamples","TEXTURE_CUBE_MAP_NEGATIVE_Z","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","isMultisample","bindRenderbuffer","RENDERBUFFER","renderbufferStorageMultisampleEXT","renderbufferStorageMultisample","renderbufferStorage","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","setupDepthRenderbuffer","isCube","__autoAllocateDepthBuffer","webglDepthTexture","setupDepthTexture","createRenderbuffer","__useRenderToTexture","_SRGBAFormat","sRGBToLinear","textureUnit","resetTextureUnits","isCompressed","cubeImage","mipmapImage","uploadCubeTexture","rebindTextures","colorTexture","setupRenderTarget","isMultipleRenderTargets","createFramebuffer","glTextureType","isWebGL3DRenderTarget","isWebGLArrayRenderTarget","updateRenderTargetMipmap","updateMultisampleRenderTarget","COLOR_BUFFER_BIT","invalidationArray","depthStyle","ignoreDepthValues","__ignoreDepthValues","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","invalidateFramebuffer","blitFramebuffer","WebGLUtils","UnsignedShort4444Type","UnsignedShort5551Type","ByteType","ShortType","IntType","HALF_FLOAT_OES","AlphaFormat","ALPHA","LuminanceFormat","LUMINANCE","LuminanceAlphaFormat","LUMINANCE_ALPHA","RedFormat","RGBFormat","SRGB_ALPHA_EXT","RedIntegerFormat","RED_INTEGER","RGFormat","RGIntegerFormat","RG_INTEGER","RGBAIntegerFormat","RGBA_INTEGER","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","COMPRESSED_SRGB_S3TC_DXT1_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","RGB_ETC1_Format","COMPRESSED_RGB_ETC1_WEBGL","RGB_ETC2_Format","RGBA_ETC2_EAC_Format","COMPRESSED_SRGB8_ETC2","COMPRESSED_RGB8_ETC2","COMPRESSED_SRGB8_ALPHA8_ETC2_EAC","COMPRESSED_RGBA8_ETC2_EAC","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR","COMPRESSED_RGBA_ASTC_4x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR","COMPRESSED_RGBA_ASTC_5x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR","COMPRESSED_RGBA_ASTC_5x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR","COMPRESSED_RGBA_ASTC_6x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR","COMPRESSED_RGBA_ASTC_6x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR","COMPRESSED_RGBA_ASTC_8x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR","COMPRESSED_RGBA_ASTC_8x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR","COMPRESSED_RGBA_ASTC_8x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR","COMPRESSED_RGBA_ASTC_10x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR","COMPRESSED_RGBA_ASTC_10x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR","COMPRESSED_RGBA_ASTC_10x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR","COMPRESSED_RGBA_ASTC_10x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR","COMPRESSED_RGBA_ASTC_12x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR","COMPRESSED_RGBA_ASTC_12x12_KHR","RGBA_BPTC_Format","COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT","COMPRESSED_RGBA_BPTC_UNORM_EXT","UNSIGNED_INT_24_8","UNSIGNED_INT_24_8_WEBGL","ArrayCamera","isArrayCamera","cameras","WebGLAnimation","isAnimating","animationLoop","requestId","onAnimationFrame","stop","cancelAnimationFrame","setAnimationLoop","setContext","Group","isGroup","_moveEvent","WebXRController","_targetRay","_grip","_hand","joints","inputState","pinching","hasLinearVelocity","linearVelocity","hasAngularVelocity","angularVelocity","inputSource","referenceSpace","inputPose","gripPose","handPose","targetRay","grip","hand","session","visibilityState","inputjoint","jointPose","getJointPose","jointName","joint","decompose","jointRadius","indexTip","thumbTip","distanceToPinch","handedness","gripSpace","getPose","targetRaySpace","DepthTexture","WebXRManager","framebufferScaleFactor","referenceSpaceType","customReferenceSpace","pose","glBinding","glProjLayer","glBaseLayer","xrFrame","getContextAttributes","initialRenderTarget","newRenderTarget","controllers","controllerInputSources","cameraL","cameraR","cameraVR","_currentDepthNear","_currentDepthFar","onSessionEvent","controllerIndex","controller","onSessionEnd","onInputSourcesChange","isPresenting","removed","added","cameraAutoUpdate","getController","getTargetRaySpace","getControllerGrip","getGripSpace","getHand","getHandSpace","setFramebufferScaleFactor","setReferenceSpaceType","getReferenceSpace","setReferenceSpace","space","getBaseLayer","getBinding","getFrame","getSession","setSession","xrCompatible","makeXRCompatible","renderState","layerInit","antialias","XRWebGLLayer","updateRenderState","baseLayer","framebufferWidth","framebufferHeight","depthFormat","depthType","glDepthFormat","projectionlayerInit","colorFormat","scaleFactor","XRWebGLBinding","createProjectionLayer","textureWidth","textureHeight","setFoveation","requestReferenceSpace","cameraLPos","cameraRPos","updateCamera","depthNear","depthFar","quaternion","ipd","projL","projR","topFov","bottomFov","leftFov","rightFov","zOffset","xOffset","translateX","translateZ","near2","far2","left2","right2","top2","bottom2","setProjectionFromUnion","getCamera","getFoveation","fixedFoveation","foveation","onAnimationFrameCallback","getViewerPose","views","setRenderTargetFramebuffer","cameraVRNeedsUpdate","glSubImage","getViewSubImage","setRenderTargetTextures","depthStencilTexture","WebGLUniformsGroups","updateList","allocatedBindingPoints","maxBindingPoints","MAX_UNIFORM_BUFFER_BINDINGS","hasUniformChanged","cachedObject","getUniformSize","boundary","storage","onUniformsGroupsDispose","webglProgram","chunkSize","chunkOffset","__data","__offset","__size","__cache","prepareUniformsGroup","bindingPointIndex","allocateBindingPointIndex","UNIFORM_BUFFER","bindBufferBase","updateBufferData","_lut","generateUUID","d0","random","denormalize","round","Quaternion","_x","_y","_z","_w","_onChangeCallback","euler","order","_order","cos","sin","c1","c2","c3","s2","s3","axis","angle","halfAngle","te","m11","m12","m13","m21","m22","m23","m31","m32","m33","vFrom","vTo","EPSILON","acos","MathUtils.clamp","angleTo","slerp","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","qb","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","atan2","ratioA","ratioB","qa","u1","sqrt1u1","sqrtu1","u2","u3","getW","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","z1","w1","dir","sqrSin","len","tDir","applyQuaternion","_quaternion","setFromEuler","setFromAxisAngle","qx","qy","qz","qw","iz","iw","minVal","maxVal","divideScalar","v2","ax","ay","az","bx","by","bz","planeNormal","projectOnVector","theta","dz","setFromSphericalCoords","phi","sinPhiRadius","setFromCylindricalCoords","sx","setFromMatrixColumn","sy","sz","Box3","isBox3","minX","minY","minZ","maxX","maxY","maxZ","makeEmpty","expandByPoint","halfSize","precise","expandByObject","isEmpty","addScalar","computeBoundingBox","_box","union","clampPoint","getCenter","_center","_extents","_f0","_f1","_f2","axes","satForAxes","_triangleNormal","getSize","_points","setFromPoints","_testAxis","extents","listener","_listeners","listeners","listenerArray","TypeError","isBufferAttribute","index1","index2","setXY","setXYZ","applyNormalMatrix","optionalCenter","maxRadiusSq","radiusSum","deltaLengthSq","expandByScalar","getMaxScaleOnAxis","setLength","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","xAxis","yAxis","zAxis","scaleX","scaleY","scaleZ","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","_zero","_one","eye","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","t11","t12","t13","t14","detInv","scaleXSq","scaleYSq","scaleZSq","tx","ty","xy","xz","yx","yz","zx","zy","z2","xx","yy","zz","wx","wy","wz","determinant","_m1","invSX","invSY","invSZ","setFromRotationMatrix","_matrix","Euler","DefaultOrder","isEuler","asin","makeRotationFromQuaternion","newOrder","setFromQuaternion","RotationOrders","setFromMatrix3Column","setFromMatrix4","transpose","_object3DId","_q1","_target","_position","_scale","_xAxis","_yAxis","_zAxis","_addedEvent","_removedEvent","isObject3D","MathUtils.generateUUID","DefaultUp","_onChange","configurable","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","matrixWorldAutoUpdate","DefaultMatrixWorldAutoUpdate","animations","updateMatrix","premultiply","rotateOnAxis","translateOnAxis","isLight","extractRotation","getObjectByProperty","traverse","traverseVisible","traverseAncestors","materials","shapes","skeletons","nodes","serialize","library","isScene","shape","bindMode","bindMatrix","skeleton","uuids","_obj","_offset","_boxMorphTargets","isBufferGeometry","makeRotationX","makeRotationY","makeRotationZ","makeTranslation","makeScale","translate","morphAttributesPosition","setFromBufferAttribute","positions","nVertices","hasAttribute","tangents","getAttribute","tan1","tan2","vA","vB","vC","uvA","uvB","uvC","sdir","tdir","handleTriangle","tmp2","n2","handleVertex","positionAttribute","normalAttribute","nA","nB","nC","ab","normalizeNormals","convertBufferAttribute","array2","geometry2","newAttribute","morphArray","hasMorphAttributes","attributeArray","PlaneGeometry","width_half","height_half","segment_width","segment_height","WebGLBackground","objects","planeMesh","boxMesh","clearAlpha","currentBackground","currentBackgroundVersion","currentTonemapping","setClearColor","getClearAlpha","setClearAlpha","renderList","forceClear","environmentBlendMode","autoClearColor","autoClearDepth","autoClearStencil","deleteAttribute","onBeforeRender","copyPosition","enableAll","epsilon","epsilon2","numericalSort","absNumericalSort","WebGLMorphtargets","influencesList","morphTextures","morph","workInfluences","objectInfluences","entry","hasMorphPosition","hasMorphNormals","hasMorphColors","vertexDataCount","vertexDataStride","morphTarget","morphNormal","morphColor","disposeTexture","morphInfluencesSum","morphBaseInfluence","influences","MAX_SAFE_INTEGER","UniformsCache","halfWidth","halfHeight","nextVersion","shadowCastingAndTexturingLightsFirst","lightA","lightB","WebGLLights","shadowCache","ShadowUniformsCache","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","numDirectionalShadows","numPointShadows","numSpotShadows","numSpotMaps","ambient","probe","directionalShadow","spotShadow","rectAreaLTC1","rectAreaLTC2","pointShadow","vector3","matrix42","numSpotShadowsWithMaps","intensity","isAmbientLight","isLightProbe","sh","coefficients","isDirectionalLight","shadowUniforms","bias","normalBias","isSpotLight","penumbra","isRectAreaLight","isHemisphereLight","LTC_FLOAT_1","LTC_FLOAT_2","LTC_HALF_1","LTC_HALF_2","setupView","identity","WebGLRenderState","lightsArray","shadowsArray","setupLights","setupLightsView","pushLight","pushShadow","shadowLight","WebGLRenderStates","renderStates","renderStateArray","WebGLMaterials","refreshUniformsCommon","uvScaleMap","uv2ScaleMap","refreshFogUniforms","isFog","density","refreshMaterialUniforms","pixelRatio","transmissionRenderTarget","isMeshLambertMaterial","isMeshToonMaterial","refreshUniformsToon","isMeshPhongMaterial","refreshUniformsPhong","refreshUniformsStandard","isMeshPhysicalMaterial","refreshUniformsPhysical","isMeshMatcapMaterial","refreshUniformsMatcap","refreshUniformsDistance","isMeshNormalMaterial","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isSpriteMaterial","refreshUniformsSprites","isShadowMaterial","createCanvasElement","GlassesRTWebGLRenderer","isWebGLRenderer","_alpha","_context","_depth","_stencil","_antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","_failIfMajorPerformanceCaveat","failIfMajorPerformanceCaveat","lastRenderLists","currentRenderList","currentRenderState","renderListStack","renderStateStack","domElement","sortObjects","useMultiLayerTransmission","transmissionMultiSampling","transmissionTargetSizeDivider","transmissionMinFilter","transmissionMagFilter","toneMappingExposure","gammaFactor","srpList","bending_pars","bendingPars","bending_vertex","bendingVertex","tapering_pars","taperingPars","tapering_vertex","taperingVertex","tapering_func","taperingFunc","fading_pars","fadingPars","fading_vertex","fadingVertex","fading_frag","fadingFrag","fadingDither_pars","fadingDitherPars","fadingDither_frag","fadingDitherFrag","_this","_isContextLost","_currentActiveCubeFace","_currentActiveMipmapLevel","_currentRenderTarget","_currentMaterialId","_currentCamera","_currentViewport","_currentScissor","_currentScissorTest","_width","_height","_pixelRatio","_opaqueSort","_transparentSort","_scissor","_scissorTest","_clippingEnabled","_localClippingEnabled","_transmissionRenderTarget","_projScreenMatrix","_vector3","_emptyScene","overrideMaterial","getTargetPixelRatio","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","contextNames","contextAttributes","contextName","REVISION","onContextLost","onContextRestore","onContextCreationError","isWebGL1Renderer","shift","initGLContext","preventDefault","infoAutoReset","shadowMapAutoUpdate","shadowMapNeedsUpdate","statusMessage","onMaterialDispose","deallocateMaterial","releaseMaterialProgramReferences","forceContextLoss","loseContext","forceContextRestore","restoreContext","getPixelRatio","setPixelRatio","setSize","updateStyle","setViewport","getDrawingBufferSize","setDrawingBufferSize","getCurrentViewport","getScissor","setScissor","getScissorTest","boolean","setOpaqueSort","setTransparentSort","bits","onXRSessionStart","onXRSessionEnd","setProgram","rangeFactor","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isSprite","prepare","getProgram","projectObject","isLOD","intersectsSprite","renderScene","opaqueObjects","transmissiveObjects","transparentObjects","renderTransmissionPass","renderObjects","mLayerTransmissive","renderTransmissionObjects","floorPowerOfTwo","srpListLength","srpUsedFlag","srp","shouldRender","onAfterRender","lightsStateVersion","programCacheKey","updateCommonMaterialProperties","onBuild","needsLights","materialNeedsLights","progUniforms","uniformsList","seqWithValue","needsProgramChange","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","LN2","uCamPos","cameraPosition","setOptional","boneTexture","computeBoneTexture","boneTextureSize","isMeshGouraudMaterial","markUniformsLightsNeedsUpdate","upload","self","setFromProjectionMatrix","useCustomOrdering","camera2","defaultFramebuffer","__useDefaultFramebuffer","useDefaultFramebuffer","isRenderTarget3D","framebufferBound","layer","framebufferTextureLayer","readRenderTargetPixels","activeCubeFaceIndex","textureFormat","IMPLEMENTATION_COLOR_READ_FORMAT","halfFloatSupportedByExt","IMPLEMENTATION_COLOR_READ_TYPE","readPixels","copyFramebufferToTexture","levelScale","copyTexSubImage2D","copyTextureToTexture","srcTexture","dstTexture","copyTextureToTexture3D","sourceBox","glTarget","unpackRowLen","UNPACK_ROW_LENGTH","unpackImageHeight","UNPACK_IMAGE_HEIGHT","unpackSkipPixels","UNPACK_SKIP_PIXELS","unpackSkipRows","UNPACK_SKIP_ROWS","unpackSkipImages","UNPACK_SKIP_IMAGES","resetState","__THREE_DEVTOOLS__","CustomEvent","detail","addSRP","srpInstance","setRenderer","removeSRP","idx","signedAngle","Va","Vb","GlassesGLTFFormats","SceneSorter","transparentMeshes","referenceSpherical","Spherical","qualityLevels","still","moving","_createClass","sortInfo","renderingOrders","sortPrecomputedMultilayer","sortRaycastPivot","azimuthalAngle","polarAngle","panAware","cameraAzimuthalAngle","cameraPolarAngle","aabb","vectorFromFrontCenter","frontCenter","minDistance","MAX_VALUE","angleWithFront","gltfGlasses","optimizeOrders","si","includeTransparent","gltf","mat","_transmission","pivot","localToWorld","closestVertex","setSortingMethod","getObjectByName","transmissiveMeshes","multiLayerRenderOrder","onlyAlphaTransparentMeshes","meshName","_iterator2","_iterator","aabbCenter","rotationMatrix","makeRotationAxis","raycastDistance","analysis","sortingMethodName","sortRaycastClosestVertex","_iterator4","findClosestRenderOrder","actualRenderOrder","createMultiLayerRenderList","_iterator6","_iterator7","rayCastPointAndUpdateRenderList","_iterator9","_iterator10","renderLayer","_loop2","_iterator13","_iterator12","sortRenderList","_iterator14","first","second","firstIndex","secondIndex","fromIndex","toIndex","arraymove","_loop4","_loop3","startPosition","intersectObjects","updateRenderList","parseGLTFGlasses","luxottica","strictMode","thirdParties","parseFittingBox","parseThirdParties","parseLuxottica","headShadowMap","hasIridescentLenses","meshes","lensL","lensR","mirrorL","mirrorR","logoLensR","logoLensL","templeL","templeR","mirror","logoLenses","splits","defaultLensesMaterial","lensesFound","frameFound","rosetta","endsWith","allDescendantMeshes","_iterator3","glassesYaw","partOf","original","cuts","templeLGrp","templeRGrp","extrasGrp","shadowGrp","computeWorldBounds","_iterator5","sceneObject","recomputeMeshes","considerNonVisible","bb","logger","createLogger","hasError","errorInfo","Component","BipaErrorOverlay","LocalizationHelper","onClickOk","LoadingSpinner","_inherits","_classCallCheck","args","loadingStatus","hidden","overlayIsHidden","mirrorStatus","showFraction","errorText","fraction","countFraction","WEBCAM_ACCESS","AsyncMirrorContainer","default","MirrorContainer","MirrorLoader","agreementStatus","BipaManager","agreementType","availability","appReadyStatus","GLASSES","ParameterHelper","MESH","meshLoaded","appLoadingStatus","upcAndLens","currentUpcReady","AnalyticsHelper","CallbackHelper","BipaOverlay","tokenVersion","auth","user","formPrefill","onAuthUpdated","onSubmit","formData","_this2","onUserReject","onPrivacyPolicyClick","hasMirrorExperienceCallbackCalled","fallback","renderKey","actions","connect","app","bindActionCreators","MirrorActions","MirrorAsyncRoot","mirrorOptions","useBiometricBipa","for","$$typeof","exports","isContextConsumer","module","ReactReduxContext","batch","getBatch","nullListeners","notify","createSubscription","parentSub","unsubscribe","handleChangeWrapper","subscription","onStateChange","trySubscribe","addNestedSub","last","isSubscribed","prev","createListenerCollection","notifyNestedSubs","tryUnsubscribe","getListeners","useIsomorphicLayoutEffect","useLayoutEffect","contextValue","previousState","Context","EMPTY_ARRAY","NO_SUBSCRIPTION_ARRAY","storeStateUpdatesReducer","updateCount","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","dependencies","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","actualChildProps","childPropsFromStoreUpdate","subscribeUpdates","shouldHandleStateChanges","childPropsSelector","forceComponentUpdateDispatch","didUnsubscribe","lastThrownError","checkForUpdates","newChildProps","latestStoreState","initStateUpdates","connectAdvanced","selectorFactory","_ref2$getDisplayName","getDisplayName","_ref2$methodName","_ref2$renderCountProp","renderCountProp","_ref2$shouldHandleSta","_ref2$storeKey","storeKey","_ref2$forwardRef","withRef","forwardRef","_ref2$context","connectOptions","_objectWithoutPropertiesLoose","WrappedComponent","wrappedComponentName","selectorFactoryOptions","_extends","pure","usePureOnlyMemo","ConnectFunction","_useMemo","reactReduxForwardedRef","propsContext","ContextToUse","Consumer","didStoreComeFromProps","createChildSelector","_useMemo2","overriddenContextValue","_useReducer","useReducer","previousStateUpdateResult","renderedWrappedComponent","Connect","forwarded","hoistStatics","is","objA","objB","keysA","keysB","wrapMapToPropsConstant","getConstant","constantSelector","dependsOnOwnProps","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","proxy","stateOrDispatch","ownProps","mapDispatchToProps","actionCreators","boundActionCreators","_loop","actionCreator","mapStateToProps","defaultMergeProps","stateProps","dispatchProps","mergedProps","areMergedPropsEqual","hasRunOnce","nextMergedProps","wrapMergePropsFunc","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","handleSubsequentCalls","nextState","nextOwnProps","propsChanged","stateChanged","nextStateProps","statePropsChanged","handleNewState","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","arg","factories","strictEqual","createConnect","_temp","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","defaultMapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","defaultMapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","defaultMergePropsFactories","_ref$selectorFactory","defaultSelectorFactory","_ref3","_ref3$pure","_ref3$areStatesEqual","_ref3$areOwnPropsEqua","_ref3$areStatePropsEq","_ref3$areMergedPropsE","extraOptions","newBatch","excluded","sourceKeys","sourceSymbolKeys","propertyIsEnumerable","instance","Constructor","_defineProperties","descriptor","writable","_possibleConstructorReturn","_assertThisInitialized","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","ReferenceError","_setPrototypeOf","NEWTAB","OutboundLink","_Component","_getPrototypeOf2","_len","_key","_this$props","eventLabel","trackerNames","eventMeta","sameTarget","normalClick","ctrlKey","shiftKey","metaKey","button","trackLink","protoProps","staticProps","subClass","superClass","_this$props2","rel","PropTypes","smallWords","titleCase","mightBeEmail","gaCalls","ga","resetCalls","_toConsumableArray","arr2","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","_isNotBrowser","_debug","_titleCase","_testMode","_alwaysSendToDefaultTracker","internalGa","_window","TestModeAPI","_format","_gaCommand","command","_initialize","gaTrackingID","useExistingGa","gaOptions","initialize","configsOrTrackingId","testMode","standardImplementation","gaAddress","Date","getElementsByTagName","async","parentNode","insertBefore","loadGA","alwaysSendToDefaultTracker","trackingId","_len2","_key2","fieldsObject","send","fieldObject","pageview","rawPath","extraFields","hitType","extraLog","modalview","rawModalName","modalName","timing","variable","timingCategory","timingVar","timingValue","timingLabel","nonInteraction","transport","eventCategory","eventAction","eventValue","exception","fatal","exDescription","exFatal","plugin","rawName","trackerName","requireString","execute","pluginName","actionType","outboundLink","hitCallback","safetyCallbackCalled","testModeAPI","Defaults","UnboundOutboundLink","GlassesEnvironment","hosts","MOCK","catalogHost","transitionHost","b3dHost","gltfHost","gltfPointer","customDistributorHost","customDistributorKey","customDistributorGetPermutation","assetType","PROD","PROD_LEGACY","TEST","TEST_LEGACY","QA_GLTF_PROD","QA_GLTF_TEST","QA_B3D_PROD","QA_B3D_TEST","DISTRIBUTOR_VALIDATION_STAGING","DISTRIBUTOR_APPROVATION_STAGING","DISTRIBUTOR_VALIDATION_PRODUCTION","DISTRIBUTOR_APPROVATION_PRODUCTION","getEnvironmentConfig","upcsAvailabilityApi","CatalogueApiConfig","upcString","envConfig","notAvailableResponse","available","transitions","lods","glassesType","standardResponse","catalogResponse","resolutions","transitionsResolutions","getGlassesType","RemoteLogConfig","getLoggerInfo","fetchCatalogResponse","apiEndpoint","requestInit","referrerPolicy","CatalogService","qaToolAvailability","response","Catalog","AppViewSessionKeys","AssetDecoder","getArrayBuffer","blob","reader","readAsArrayBuffer","getZippedImage","imagePromise","getImage","createObjectURL","revokeObjectURL","getImageBase64","getZippedGLTF","gltfPromise","getGLTFAsset","arrayBuffer","assetNames","gltfDefaults","MockAssetData","GenericError","genericError","GlassesDownloadError","GlassesDownloadForbiddenError","GlassesNotFoundError","isDistributorAsset","ALL_TEXTURES","GlassesExtractor","glassesZip","singleTexture","colorIndexes","unzipGlasses","time1","performance","now","time2","jszip","JSZip","loadAsync","extractFilesFromZipArchive","glassesExtracted","createGlassesDataFromExtractedArchive","zipUpc","promises","folderName","extractB3D","extractMult","extractShadow","extractLensMap","extractBoundingBoxes","extractLandmarks","extractColors","promise","zipFolder","folder","colorPromise","ttime","multPromise","mult","shadowPromise","lensmapFile","lensmapPromise","lensmap","byteLength","lensBoundsFile","lensBoundsPromise","bounds","landmarksFile","landmarksPromise","landmarks","b3dPromise","b3d","textureIndexes","objModel","transparency","lensMap","lensBoundingBox","glassesLandmarks","ZipDownloader","remoteLog","RemoteLog","tryToDownload","unzip","glassesUrl","requestOptions","customDistributorAsset","qaDistributorAsset","dash","underscore","isQADistributorAsset","getCustomUrl","getDistributorUrl","getUrl","triedLegacyCustom","fetchGlasses","traceDownloadSuccess","traceDownloadFailure","reason","getLegacyUrl","tkn","baseName","distributorBasename","sendAppViewSession","statusCode","GLASSES_OK","GLASSES_DOWNLOAD_SUCCESS_UPC","GLASSES_DOWNLOAD_SUCCESS_TIME","GLASSES_KO","GLASSES_DOWNLOAD_FAILURE_UPC","GLASSES_DOWNLOAD_FAILURE_TIME","miscUrls","boundsUrl","landmarksUrl","GlassesDownloader","glassesEnvironment","getMockGltfGlassesUrl","gltfUrl","assetData","LOD1","LOD2","gltfLodUrls","nosepadType","fitting","flare","misc","landmarksAndBBox","LOD0","lod0","lod1","lod2","assetNumLods","lodNumber","upcSiUrl","_a","nosepad_type","_b","_c","_d","shouldDownloadZip","downloadZippedGlasses","lensBoundingBoxes","downloadSeparatedGlasses","lensMapUrl","lensBoundsUrl","glassesLandmarksUrl","qaToolEnv","qaTool","getInstance","downloadB3dAsset","responses","glassesAndLensMap","glassesAsset","b3dUrl","transparencyUrl","shadowUrl","textureUrls","textureResponse","assetsResponses","glassesAssetUrl","_super","VtoError","__extends","OpacityError","UnknownError","InitializationError","InvalidEnvironmentError","parameter","InvalidParametersError","UpcSupportedError","UserCreateError","UserDownloadError","VideoDownloadError","UpcMissingError","RenderingError","MountComponentError","UnmountComponentError","UserMissingError","MirrorError","InstanceManagementError","MissingInstanceError","ScreenshotError","glassesCache","GlassesCache","glassesData","videoCache","VideoCache","videoData","supportedFeatures","ReactGA","gaTrackingId","GA","webglSupport","webglRendering","eventName","fieldOptions","sendEvent","pupillaryDistance","renderData","sendConfigEvent","captureSupport","processingFailureReason","webcamAccessSupport","webcamAvailable","renderCanvas","isObject","isString","isNumber","isBoolean","mergeDeep","vtoInstances","VtoInstanceContainer","_instance","_i","glRender","instanceId","SET_CONFIG","SET_ANALYTICS_CONFIG","UPDATE_INSTANCE","ADD_VIDEO","DELETE_VIDEO_DATA","SET_VIDEO_DATA","SET_VIDEO_FACE_DATA","SET_VIDEO_STATUS","SET_INSTANCE_INDEX","SWIPE_INSTANCE","DELETE_INSTANCE","ADD_GLASSES","GLASSES_FALLBACK","SET_GLASSES_DATA","SET_GLASSES_STATUS","SET_RENDERER_STATUS","RenderActions","updateInstance","createAction","Actions","setInstanceIndex","swipeInstance","deleteInstance","addVideo","setVideoData","deleteVideoData","setVideoFaceData","setVideoStatus","eraseVideoCache","addGlasses","glassesFallback","setGlassesData","setGlassesStatus","setRendererStatus","RenderReducer","handleActions","newState","currentInstance","videoStatus","rendererStatus","faceData","videoFaceData","poseIndex","renderOptions","noseIndex","swiped","upcStatus","CloseRenderFunction","validateCloseRenderOptions","onCloseRender","getVtoInstance","removeInstance","onRenderSuccess","onRenderError","onTransitionAnimation","opacityValue","onTransitionAnimationEnd","vtoCoreEnvironment","vtoGlassesEnvironment","vtoServerEnvironment","publicHost","productionConfig","AppActions","setConfig","setAnalyticsConfig","AppReducer","__assign","_a$1","glassesDownloader","assetLoader","AssetLoader","GlassesHelper","upcAvailability","b3dparams","downloadGltfGlasses","loadGltfAsset","asset","accessTime","downloadGlasses","glassesPromise","VtoApi","VtoServerClient","singlePose","setEnvironment","developmentConfig","developmentLocalServerConfig","stagingConfig","integrationConfig","acceptanceConfig","localizationPromise","localTranslations","localizedTranslations","translationType","defaultTranslations","en","fr","it","ja","ko","nl","pt","tr","zh","CORE","PERMISSION_ERROR","ERROR","SUBTEXT","WEBCAM_ERROR","RENDER_VTO","CLICK_AND_MOVE","ROTATE","SLIDE_DESKTOP","SLIDE_TWO_FINGERS","SWIPE_TWO_FINGERS","RENDER_ERROR","TITLE_1","TITLE_2","TITLE_3","UPC_MISSING","TITLE","textEnv","localeMap","translationFound","fetchLocalization","translation","fallbackTranslation","englishTranslation","defaultInitializeOptions","videoCacheLimit","glassesCacheLimit","InitializeFunction","mergedOptions","validateInitializeOptions","GlUtils","onInitializeSuccess","IsUpcSupportedFunction","validateIsUpcSupportedOptions","supported","transitionLensName","finalOpacity","animationStartTime","animationDuration","DownloadHelper","centerImage","form","FormData","iris","imagePupils","pupils","detected","transitionLensMap","transitionOpacity","animationEnabled","animateForward","TransitionColorHelper","downloadTransitionColors","setTransitionOverrideColor","OVERRIDE","startAnimation","duration","forward","currentOpacity","computePartialAnimation","getTransitionLens","getCurrentTransitionLens","setCurrentTransitionLens","setCurrentTransitionLensName","setCurrentLensOpacity","inputOpacity","getCurrentLensOpacity","animationProgress","PupilOverlay","OverlayHelper","inputImageSize","cropOffset","screenSpaceRatio","PupilImageOverlay","inputPosition","canvasSize","leftPupil","convertCoordinates","rightPupil","MeshCenterOverlay","meshCenter","RenderDebugOverlay","debugOptions","showMeshCenter","showPupils","showImagePupils","RenderCanvas","vtoRenderer","ThreeRender","addRender","prevProps","sendRenderEvent","glassesStatus","previouslyRenderedKey","renderGlasses","selectedPd","updateOptions","enableScaling","renderFov","offsetZ","onRender","onRenderPose","bucketSuffix","showDebugOverlay","MathHelper","DoubleFingerIcon","swipeSpeedModifier","noseSwipeSpeedModifier","hammerManagerPose","Hammer","domEvents","touchAction","recognizers","pointers","computeIndexes","previousY","hammerManagerNose","touches","enableNosePosition","hammerManagerOverlay","firstTouch","onRenderSwipe","oldIndex","previousX","deltaX","deltaIndex","indexInterval","indexCount","onSetIndex","oldNoseIndex","deltaY","noseIndexInterval","noseIndexCount","onSetNoseIndex","SwipeableContainer","initializeHammer","destroyHammer","notification","getString","detectPupils","initialIndex","RenderContainer","fetchAssets","fetchFaceData","singlePoseIndex","shouldUpdateVideo","shouldUpdateGlasses","downloadingDivId_1","downloadingVideoId_1","meshVideoData","shouldEnableNosePosition","RenderError","LazyRenderContainer","RenderLoader","shouldShowErrorScreen","optimizeSinglePose","shouldShowLoadingScreen","showPercentage","defaultRenderOptions","showMesh","calculatePupils","calculateMeshCenter","checkError","hideGlasses","hideShadow","hideBackground","hideLenses","hideFrame","meshColor","renderCount","RenderFunction","validateRenderOptions","input","stringToNumber","validUpc","addVto","newVideoStatus","newGlassesStatus","setRenderErrorCallback","enhancer","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","configureStore","setVtoEnvironment","errorWrapper","errorFunction","isUpcSupported","closeRender","setTransitionOpacity","setTransitionColorName","setTransitionLensName","quality","outputCanvas","antialiasCanvas","antialiasCanvasContext","steps","TypePass","VertColorOpts","glassesOptsDefault","glassesOffset","glassesScale","earDistance","earZ","fadeScale","enableDebug","enableFade","ColorBufferType","vertDefaultColorParameters","renderOpts","COLORS","useStandardMVPUniform","shaderMaterialParameters","RENDER_NORMALS","RENDER_UVS","RENDER_COLORS","THREEJS_MATRICES","AttributesDebugMaterial","setParameters","NORMALS","UVS","RawShaderMaterial","transitionGlassesMaterialDefaultOpts","mvp","taper","sideInFront","fadePositionZ","useLensMap","multMap","lensTransmission","transmissionCorrectionFactor","blendMode","LENS_MASK","HIDE_LENSES","HIDE_FRAME","GlassesB3DTransitionMaterial","srpType","MULT","initParameters","configureMaterials","Uniform","ADD","EqualStencilFunc","IncrementStencilOp","setPass","useStandard","newDefines","def","world","TRANSITION_LEGACY","USE_MULTMAP_FOR_TRANSITION","lensCoatingSpecularity","sphereOrigin","reflectionVecMat","lensCoatingSpecularColor","GlassesB3DTransitionMirrorMaterial","isUniformChanged","MIRROR","currentSetting","newSetting","gradientGlassesMaterialDefaultOpts","GRADIENT_VALUES","heightOnLensInterpolationFactor","lensMinY","lensMaxY","GlassesB3DGradientMaterial","setDefines","defaultB3DMeshOpts","initMaterialState","debugEnabled","maxViews","maxDegreeRotation","B3DMesh","bspGeometry","b3dData","getBufferGeometry","glassesOpts","glassesColors","glassesMult","glassesLens","glassesShadow","resource","initMaterials","changeMaterialState","defaultColorTextureIndex","debugMat","transitionMat","getBSP","getFlare","mirrorMat","gradientMat","transition","gradient","multiPassEnabled","currentMaterialState","mvps","sortTrianglesForAllFrames","poseIndexTexture","_poseIndexTexture","updateIBODataFromPose","computeVertexNormals","$Reader","$protobuf","$Writer","$util","$root","Binocular3DObject","B3DVertex","nx","ny","nz","nw","encode","writer","uint32","sint32","encodeDelimited","ldelim","decode","pos","skipType","ProtocolError","decodeDelimited","verify","isInteger","fromObject","toObject","B3DTriangle","A","B","C","hasFront","hasCoplanar","hasBack","int32","bool","B3DObject","childlist","vlist","tlist","isBSP","emptyArray","fork","arrays","B3DHelper","b3dbuffer","b3dObj","vertCount","triangleCount","getVerticesFromB3D","getIndicesFromB3D","ORDER","BSP","LEVEL","VTOPackType","VTOImageLoadType","defaultDebugOpts","vertexOrder","trisOrder","useAverage","levelC","levelF","levelB","levelBThr","levelFThr","levelCThr","GlassesB3DGeometry","millimetersToMetersScalingFactor","debugOpts","protobufferObject","geometryMultiplier","getUVSFromB3D","vertexCount","trisCount","vboData","bspTree","triangleIndexList","bufferIndices","projectedVBOData","initDebugStructures","buildBSPTree","maxLevelF","maxLevelB","maxLevelC","bspBuilt","sortedTriangles","projectVBODataWithMVP","generateInnerSortedIndexListNonRecursive","vert","maxF","maxB","maxC","root","bsp","b3ddata","front","coplanar","back","v3","x12","y12","x13","v0Index","v1Index","v2Index","sorted","parentT","frontT","coplanarT","backT","isTriangleFrontFacing","updateFrontLevels","updateCoplanarLevels","updateBackLevels","nodeStack","rootChildren","generateChildrenForIndex","nextIdx","indexPos","vertexIndex","tris","lIndex","tIndex","currentTriangle","debugOrderColorBuffer","debugBspColorBuffer","prevAmountFront","vertexOccur","prevAmountBack","prevAmountCoplanar","avgFront","avgBack","avgCoplanar","debugLevelColorBuffer","getStartIndex","bufIndices","updateBufferColorPerVertex","bufferCol","sortedTris","updateColorBuffers","frameno","B3DFactory","VTOShadowBlendType","defaultParams","enableMirrorPass","stencilStart","stencilEnd","GlassesB3DTransitionMirrorSRP","INCR","stendilEnd","LensStandardTransitionMirrorSRP","shadowBgDefaultParameters","debugColor","showFitArea","debugZMultiplier","cullYmin","cullYmax","headScale","isVM","texOffset","shadowOffset","noseOffset","earOffset","useColorMap","disableShadowCoordFlip","shadowVert","shadowFrag","SCREENSPACE_UV_X_FLIP","USE_COLOR_MAP","DISABLE_SHADOW_COORD_UV_Y_FLIP","scaleMultiplier","zPosThreshold","discardOverZPos","HeadStandardShadowMaterial","mapEncoding","shOffset","DISCARD_OVER_ZPOS","basicMaterialDefault","mapY","mapX","mapZ","sensitivity","LensStandardIridescentMaterial","other","_get","LENS_SRGB","glassesPitch","transitionLensesMaterialDefaultOpts","LENS_LINEAR","LensStandardTransitionMirrorMaterial","gradientLensesMaterialDefaultOpts","LensStandardGradientMaterial","defaultHeatmapParameters","cutoffMin","cutoffMax","worldToRestMatrix","ShaderChunkReplacer","replacements","replacement","chunk","addReplace","onVertex","onFragment","getLogger","FeatureMaterialBuilder","replacer","bendAmount","bendDistance","invWorldToRestMatrix","updateUniforms","unitScaleFactor","ditheringDistribution","applyTransmissionCorrection","mix","luma","softLight","edge0","edge1","smoothstep","highlightMap","LensTypes","computeLensParameters","lensDescription","statesInterpolation","coatingSpecularColor","coatingSpecularity","correctedTransmission","gradientHeight","getLensType","TRANSITION_MIRROR","states","GRADIENT","_step","INTEGRATED","GLTFLensesManager","iridescentMaterials","actuaLensType","transitionMirrorMaterial","gradientMaterial","IRIDESCENT","eul","updatesGlassesOrientation","materialParams","lensParams","setLensParameters","additionalParams","setLinearTosRGB","protobuf","configure","util","_configure","Writer","BufferWriter","Reader","BufferReader","build","rpc","roots","LongBits","utf8","indexOutOfRange","writeLength","RangeError","buf","create_array","Buffer","isBuffer","readLongVarint","lo","hi","readFixed32_end","readFixed64","_slice","fixed32","sfixed32","float","readFloatLE","double","readDoubleLE","bytes","wireType","BufferReader_","Long","int64","uint64","sint64","zzDecode","fixed64","sfixed64","utf8Slice","Service","rpcImpl","requestDelimited","responseDelimited","EventEmitter","rpcCall","requestCtor","responseCtor","request","asPromise","emit","endedByRPC","zero","toNumber","zzEncode","zeroHash","fromNumber","fromString","low","high","unsigned","toLong","charCodeAt","fromHash","toHash","fromCharCode","part0","part1","part2","ifNotSet","newError","CustomError","captureStackTrace","stack","base64","inquire","pool","isNode","global","process","versions","freeze","emptyObject","isset","isSet","prop","utf8Write","_Buffer_from","_Buffer_allocUnsafe","newBuffer","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","fromBits","lcFirst","oneOfGetter","fieldNames","fieldMap","oneOfSetter","toJSONOptions","longs","enums","allocUnsafe","Op","val","noop","State","head","tail","writeByte","VarintOp","writeVarint64","writeFixed32","alloc","_push","writeFloatLE","writeDoubleLE","writeBytes","write","BufferWriter_","writeStringBuffer","writeBytesBuffer","GLTFLoader","manager","dracoLoader","ktx2Loader","meshoptDecoder","pluginCallbacks","register","parser","GLTFMaterialsClearcoatExtension","GLTFTextureBasisUExtension","GLTFTextureWebPExtension","GLTFMaterialsSheenExtension","GLTFMaterialsTransmissionExtension","GLTFMaterialsVolumeExtension","GLTFMaterialsIorExtension","GLTFMaterialsEmissiveStrengthExtension","GLTFMaterialsSpecularExtension","GLTFMaterialsIridescenceExtension","GLTFLightsExtension","GLTFMeshoptCompression","GLTFMeshGpuInstancing","onProgress","resourcePath","LoaderUtils","itemStart","_onError","itemError","itemEnd","loader","FileLoader","setPath","setResponseType","setRequestHeader","requestHeader","setWithCredentials","withCredentials","plugins","ArrayBuffer","BINARY_EXTENSION_HEADER_MAGIC","EXTENSIONS","KHR_BINARY_GLTF","GLTFBinaryExtension","GLTFParser","fileLoader","extensionsUsed","extensionName","extensionsRequired","KHR_MATERIALS_UNLIT","GLTFMaterialsUnlitExtension","KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS","GLTFMaterialsPbrSpecularGlossinessExtension","KHR_DRACO_MESH_COMPRESSION","GLTFDracoMeshCompressionExtension","KHR_TEXTURE_TRANSFORM","GLTFTextureTransformExtension","KHR_MESH_QUANTIZATION","GLTFMeshQuantizationExtension","setExtensions","setPlugins","GLTFRegistry","removeAll","KHR_LIGHTS_PUNCTUAL","KHR_MATERIALS_CLEARCOAT","KHR_MATERIALS_IOR","KHR_MATERIALS_SHEEN","KHR_MATERIALS_SPECULAR","KHR_MATERIALS_TRANSMISSION","KHR_MATERIALS_IRIDESCENCE","KHR_MATERIALS_VOLUME","KHR_TEXTURE_BASISU","KHR_MATERIALS_EMISSIVE_STRENGTH","EXT_TEXTURE_WEBP","EXT_MESHOPT_COMPRESSION","EXT_MESH_GPU_INSTANCING","refs","uses","nodeDefs","nodeIndex","nodeLength","nodeDef","_addNodeRef","lightIndex","dependency","lightNode","lightDef","range","DirectionalLight","PointLight","SpotLight","innerConeAngle","outerConeAngle","createUniqueName","_loadLight","_getNodeRef","materialDef","metallicRoughness","pbrMetallicRoughness","baseColorFactor","baseColorTexture","assignTexture","emissiveStrength","clearcoatFactor","clearcoatTexture","clearcoatRoughnessFactor","clearcoatRoughnessTexture","clearcoatNormalTexture","iridescenceFactor","iridescenceTexture","iridescenceIor","iridescenceThicknessTexture","sheenColorFactor","sheenRoughnessFactor","sheenColorTexture","sheenRoughnessTexture","transmissionFactor","transmissionTexture","thicknessFactor","thicknessTexture","colorArray","specularFactor","specularTexture","specularColorFactor","specularColorTexture","textureIndex","textureDef","loadTextureImage","textureLoader","uri","handler","getHandler","detectSupport","loadTexture","bufferView","bufferViews","extensionDef","getDependency","decoder","byteOffset","byteStride","decodeGltfBufferAsync","ready","decodeGltfBuffer","meshDef","primitives","primitive","WEBGL_CONSTANTS","TRIANGLE_STRIP","TRIANGLE_FAN","attributesDef","accessor","createNodeMesh","nodeObject","instancedMeshes","InstancedMesh","TRANSLATION","ROTATION","SCALE","setMatrixAt","attributeName","assignFinalMaterial","BINARY_EXTENSION_CHUNK_TYPES","headerView","DataView","header","magic","getUint32","chunkContentsLength","chunkView","chunkIndex","chunkLength","chunkType","contentArray","preload","bufferViewIndex","gltfAttributeMap","threeAttributeMap","attributeNormalizedMap","attributeTypeMap","threeAttributeName","ATTRIBUTES","accessorDef","accessors","componentType","WEBGL_COMPONENT_TYPES","decodeDracoFile","texCoord","GLTFMeshStandardSGMaterial","isGLTFSpecularGlossinessMaterial","specularMapParsFragmentChunk","glossinessMapParsFragmentChunk","specularMapFragmentChunk","glossinessMapFragmentChunk","lightPhysicalFragmentChunk","glossiness","glossinessMap","_extraUniforms","uniformName","USE_SPECULARMAP","USE_GLOSSINESSMAP","USE_UV","specularGlossinessParams","pbrSpecularGlossiness","diffuseFactor","diffuseTexture","glossinessFactor","specularGlossinessTexture","specGlossMapDef","GLTFCubicSplineInterpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","valueSize","stride2","stride3","td","pp","ppp","offset1","offset0","m0","m1","Interpolant","_q","GLTFCubicSplineQuaternionInterpolant","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","SAMPLER_2D","WEBGL_FILTERS","WEBGL_WRAPPINGS","WEBGL_TYPE_SIZES","POSITION","NORMAL","TANGENT","TEXCOORD_0","TEXCOORD_1","COLOR_0","WEIGHTS_0","JOINTS_0","PATH_PROPERTIES","INTERPOLATION","CUBICSPLINE","InterpolateLinear","STEP","InterpolateDiscrete","ALPHA_MODES","addUnknownExtensionsToUserData","knownExtensions","objectDef","gltfExtensions","assignExtrasToUserData","gltfDef","extras","targetNames","createPrimitiveKey","primitiveDef","dracoExtension","createAttributesKey","attributesKey","getNormalizedComponentScale","associations","primitiveCache","meshCache","cameraCache","lightCache","sourceCache","textureCache","nodeNamesUsed","isSafari","isFirefox","firefoxVersion","createImageBitmap","TextureLoader","ImageBitmapLoader","setCrossOrigin","_invokeAll","ext","_markDefs","beforeRoot","getDependencies","scenes","afterRoot","skinDefs","skins","meshDefs","skinIndex","skinLength","isBone","skin","updateMappings","mappings","entries","func","loadScene","loadNode","_invokeOne","loadMesh","loadAccessor","loadBufferView","loadBuffer","loadMaterial","loadSkin","loadAnimation","loadCamera","defs","bufferIndex","bufferDef","bufferViewDef","accessorIndex","sparse","pendingBufferViews","bufferAttribute","TypedArray","elementBytes","itemBytes","ibSlice","ibCacheKey","ib","InterleavedBuffer","InterleavedBufferAttribute","itemSizeIndices","SCALAR","TypedArrayIndices","byteOffsetIndices","byteOffsetValues","sparseIndices","sparseValues","setX","setY","setZ","setW","sourceIndex","sourceDef","sampler","loadImageSource","samplers","webkitURL","sourceURI","isObjectURL","mimeType","isImageBitmapLoader","imageBitmap","mapName","mapDef","gltfReference","extendTexture","useDerivativeTangents","useVertexColors","useFlatShading","pointsMaterial","lineMaterial","materialType","materialExtensions","sgExtension","getMaterialType","extendParams","kmuExtension","metallicFactor","roughnessFactor","metallicRoughnessTexture","extendMaterialParams","alphaMode","alphaCutoff","normalTexture","occlusionTexture","strength","emissiveFactor","emissiveTexture","createMaterial","originalName","sanitizedName","PropertyBinding","createDracoPrimitive","decodePrimitive","addPrimitiveAttributes","geometryPromise","meshIndex","loadGeometries","SkinnedMesh","skinWeight","normalizeSkinWeights","toTrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","LineSegments","Line","LineLoop","Points","cameraIndex","cameraDef","yfov","aspectRatio","znear","zfar","xmag","ymag","skinDef","skinEntry","inverseBindMatrices","animationDef","pendingNodes","pendingInputAccessors","pendingOutputAccessors","pendingSamplers","pendingTargets","channels","inputAccessors","outputAccessors","targets","tracks","inputAccessor","outputAccessor","TypedKeyframeTrack","NumberKeyframeTrack","QuaternionKeyframeTrack","VectorKeyframeTrack","targetName","outputArray","scaled","createInterpolant","times","getValueSize","isInterpolantFactoryMethodGLTFCubicSpline","AnimationClip","nodeName","meshPromise","createNodeAttachment","Bone","sceneIndex","sceneDef","nodeIds","buildNodeHierarchy","reducedAssociations","reduceAssociations","nodeId","parentObject","pendingJoints","jointNodes","bones","boneInverses","jointNode","Skeleton","assignAttributeAccessor","gltfAttributeName","boxScale","maxDisplacement","expandByVector","computeBounds","hasMorphNormal","hasMorphColor","pendingPositionAccessors","pendingNormalAccessors","pendingColorAccessors","pendingAccessor","morphPositions","addMorphTargets","drawMode","getIndex","numberOfTriangles","newIndices","newGeometry","RGBELoader","rgbe_error","rgbe_error_code","msg","fgets","lineLimit","consume","RGBEByteToRGBFloat","sourceArray","sourceOffset","destArray","destOffset","RGBEByteToRGBHalf","DataUtils","byteArray","rgbe_header_info","gamma_re","exposure_re","format_re","dimensions_re","valid","comments","programtype","gamma","exposure","RGBE_ReadHeader","image_rgba_data","scanline_width","data_rgba","ptr_end","rgbeStart","scanline_buffer","num_scanlines","ptr","isEncodedRun","byteValue","RGBE_ReadPixels_RLE","numElements","floatArray","halfArray","texData","DataTextureLoader","IridescenceMaterialLoaderPlugin","px","py","pz","importCubeMap","cubeMap","debugCubeMap","importEnvMap","_context2","debugHdrMap","hdrMap","CubeTextureLoader","useDebugEnvMap","uploadCubeEnvMap","setDataType","loadGltf","gltfarray","gltfLod","loadSortInfo","SRBGShader","BackgroundTexture","validPoseCount","createTextures","backgroundTexture","bgTextr","backgroundSrgbTexture","resetBackgroundTextures","backgroundPromises","targetTexture","targetSrgbTexture","CopyShader","Pass","needsSwap","renderToScreen","_camera","_geometry","FullScreenQuad","_mesh","ShaderPass","textureID","fsQuad","writeBuffer","readBuffer","MaskPass","inverse","writeValue","clearValue","REPLACE","ClearMaskPass","EffectComposer","renderTarget1","renderTarget2","passes","copyPass","clock","Clock","pass","passIndex","deltaTime","getDelta","maskActive","isLastEnabledPass","swapBuffers","effectiveWidth","effectiveHeight","RenderPass","_oldClearColor","oldClearAlpha","oldOverrideMaterial","oldAutoClear","FillShader","blur3vert","blur3frag","DefaultGlRenderDebugOptions","showMeasurements","showAxes","showGizmos","multipassDepth","showInspector","fittingVertices","showPupilsNormals","showAntropometric","checkLensMap","checkSorting","useStaticTransitionMaterial","globalDebugMethods","dpi","transmissionQuality","binaryString","atob","base64ToBuffer","RenderType","DefaultGlRenderOptions","faceTri","faceTriData","headUV","headUVData","measurementsCallback","loadingCallbacks","onStart","onFinish","FittingOffset","RenderDataUtils","arraybuf","headUVCount","headUV16f","headUVs","croppedHeadUVCount","float16_to_float","shapexyzw","nPoints","triangulation","pointNeighbours","vertex0","vertex1","vertex2","deformation","shapeLength","dX","dN","dI","perFrameShape","transformCount","ksGlassesOffsetY","ksGlassesOffsetZ","noseVtx1","noseVtxRoot","noseVtx2","noseVtxTip","eartx","earVtx","maxGlassesPoses","rotMat","glassesDefaultRotation","noseRoot","vec3","noseTip","earP","transformations","thetaRotMat","getRotationMatrixForGlasses","glassesMat","mat4","earPosition","thetaRot","NaN","neighbours","accumulatedWeight","sourceLabel","FastFittingMode","referenceGlassesPoses","headShape","poseMat","quat","axisAngle","glassesPose","glassesPoseMat","glassRot","calculateMeshSpecificPoses","poseVec6ToMat4","headPose","scalingFactor","headPoseMat","getHeadWorldMatrix","headMVPMat","scaleMat","headRot","appliedOffset","getGlassesWorldPosition","headMatrices","getHeadMatrices","glassesWorld","glassesMVPMat","zerosVec3Array","posesTowardFace","angleAxis","getAngleAxis","pushedMatrix","gPose","posesTowardNose","basicRotation","alignedPoses","newRotationMatrix","lower","getHeadVertexAtIndex","upper","yOffset","MILLIMETERS2METERS_SCALINGFACTOR","Inspector","inspectorLayer","backgroundColor","paddingLeft","overflowWrap","innerText","openClose","textAlign","fontFamily","borderRadius","cursor","boxShadow","onclick","createLayer","newLine","innerHTML","bygozomaticBreadthIdsRaw","bygozomaticBreadthIds","headBreadthIDsRaw","headBreadthIDs","ears","temples","noseBridge","zygofrontale","frontotemporale","faceWebFB","infraorbitale","expectedNumberOfVertices","Distance","headBreadth","bygozomatic","VPosition","Measurements","scaledDistance","MeasureCalculator","measurementsData","calcMeasurements","headPD","addLine","faceBreadth","headFB","getVertex","breadthIds","unscaledResult","vertexCouple","unscaledMeasurements","coupleId","coupleVertex","leftId","rightId","headBreadthResults","findBreadthFromIDs","bygozomaticBreadthResults","processVertex","measurements","headBreadthUnscaledResults","bygozomaticBreadthUnscaledResults","getLeft","getRight","getWeightedPosition","HeadPoses","newHeadPoses","headPoses","newHeadPose","standardHeadPoses","poses","getNearestPoseOrientation","sourceOrientation","sourceQuaternion","distances","distanceQuaternion","vectorPart","getStandardHeadPose","webglContextAttributes","getWebglContext","webglContext","webglRenderingContext","NO_ERROR","vertSrc","fragSrc","programIdentifier","proj","vsh","fsh","errmsg","logmsg","validateProgram","bufferWidth","bufferHeight","isPowerOf2","base64Image","GLPrograms","smoother","filterStep","textr","ATTRIB_POS_TEXTURE","blender","shade","warpVertex","warper","warperAlpha","blueWarper","blueGlassesWarper","blur3","cropInfo","blur3Vertex","blur3Fragment","warperFlat","ATTRIB_POS","depthRenderer","modelMinZ","modelMaxZ","cullXMin","depthRenderFrontVS","POSITION_ATTRIBUTE","textureCoord","TEX0_COORD_ATTRIBUTE","vertexColor","COLOR_ATTRIBUTE","DepthRenderer","perspectiveCameraMat","globalShapeHomogeneous","zHeadForDepthRender","mycanvas","canvasWidth","canvasHeight","oldContainer","topDepthDebugView","depthContainer","createDepthRenderer","headVBO","headIBO","STATIC_DRAW","noseTipZ","noseTopY","noseRootY","eyeGland","headTrans","headMat","viewProjectionMatrix","modelBoxMinZTopV","modelBoxMaxZTopV","modelBoxMinEye","zBoxScale","canvasArea","depthAsRGBA","depthFloat","topViewInfiniteValue","cameraMat","frontDepthDebugView","modelBoxMinZ","GlassesAssetType","PushGlasses","glassesVertex","gVertexStep","shapeDepthRendered","corrections","zMin","transfMat","glassesSampling","glassesZ","resultMV","resultMVP","coord","debugVertexHTML","drawDebugVertex","border","mat3","displacement","referencePose","glassesY","vertexID","vertexValues","validIndex","glassesDepthTrans","transformationMatrix","transformedVertex","defaultMinDistance","debugVertices","depthValue","debugVertex","distanceDebug","viewId","marginTop","defaultFloatingNosepadOffset","GeometryDataEngine","meshTriangulation","frontalFrameno","cameraAspectRatio","depthRenderParams","scaleGlassesOnly","measureCalculator","headUVCoordinates","parseHeadUVData","findPointNeighbours","GeometryData","posesCountChanged","poseIndexChanged","oldPoseIndex","cameraFov","setHead","deformations","deformationIndex","glassesPoses","faceMeasurement","imageSize","useFaceBreadth","needsSetup","horizontal","vertical","callMeasurementsCallback","clearGlassesPoses","glassesUPC","shapeForFrame","diffuseDeformationRange","addHomogenousCoordinate","getShapeForFrame","shapeN","shapeUV","zhead","getHeadPose","leftDegrees","rightDegrees","upDegrees","downDegrees","defaultPoses","getCameraMat","computeScaleFromFb","computeScaleFromPd","renderFrontalShapeDepth","shapeTopDepthRendered","renderTopShapeDepth","calculateGlassesTransforms","fastFitting","setPD","setFB","calcEarDistance","getGlassesPoseAt","glassesRotation","fittingNoseIndex","useFastFittingMode","shouldApplyFloatingNosepadOffset","glassesMatrices","getGlassesMatricesWrapper","fadeLocation","vec4","getEarZ","glassesMatInv","fadeLocGlasses","getHeadScale","calculateMeshSpecificPosesWrapper","calculateFastFittingOrigin","getGlassesMatrices","getGlassesGeometry","updates","pushGlassesTowardsFace","updatePushTowardNose","pushGlassesTowardsNose","headMVP","leftEye","rightEye","leftEyeScreen","leftEyeVector","leftEyeScreenNormalized","leftPositiveClipSpace","rightEyeScreen","rightEyeVector","rightEyeScreenNormalized","rightPositiveClipSpace","meshScreen","meshVector","meshScreenNormalized","meshPositiveClipSpace","GlassesMaterials","transitionsMirrorMaterialRotation","debugNamePrefix","getObjectVertices","pts","geo","ptCount","getBoundingSphere","createFrame","radX","radY","Shape","hole","Path","holes","extrudeSettings","bevelEnabled","bevelSegments","bevelSize","bevelThickness","ExtrudeGeometry","parseLensBBGltfScene","additionalGlassesMeshes","rad","quad","originalPos","originalRot","debugPoints","pointArray","drawOnTop","iMesh","setPosition","parseLandmarksGltfScene","boxSize","nameEnd","mark","generateFlatTexture","DataTexture","LensesType","GlassesSceneData","shouldApplyfloatingNosepadOffset","fastFittingMode","gltfObject","mergeBufferAttributes","arrayLength","NosepadTypes","FittingTypes","GlassesState","GLTFGlasses","geometryCallbacks","hasLandmarks","hasMisc","templeGroups","glassesHaveOneLens","featureBuilder","headWorldMatrix","cubeEnvMap","lensesManager","applyNosepadOffset","FLOATING","isFastFittingMode","FAST","updateFastFittingOrigin","fittingLOD","processFittingGeometry","setGlasses","gltfScene","processParsedGLTFGlasses","offsetRotation","lm","setEnvironmentMap","setsRGBToLinearIridescentLenses","fittingGeometry","worldMatrix","centerOffset","fittingOrigin","setsRGBToLinearTransitionsLenses","setLenses","param","cameraToglasses","grp","threeM","inv","setTaperUniforms","getBendAmount","setBendingUniforms","setFadeUniforms","computeAndSetLensParameters","onBeforeRenderLenses","getFastFittingOrigin","setFromObject","vArray","internalTempleDistance","findExternalTempleDistance","templeMeshL","templeMeshR","addMaterialFeatures","removeExtrasGRP","mergeGeometry","gltfModel","mergedGeometry","errorLoggingGeometry","useGroups","isIndexed","attributesUsed","morphAttributesUsed","attributesCount","indexOffset","mergedIndex","mergedAttribute","numMorphTargets","morphAttributesToMerge","mergedMorphAttribute","mergeBufferGeometries","getPaceDistance","getGlassesTaper","addTapering","getGlassesScale","addBending","addDitheringFading","compileMaterial","TAPERING","BENDING","FADE","extrasGRP","removeFromParent","SceneInspector","Glasses","addToScene","currentAssetType","UNDEFINED","PROCESSING","glassesContainer","addObjectToScene","b3DGlassesMaterialType","B3D_TRANSITION_STATIC","debugContainer","SphereGeometry","axesHelper","AxesHelper","blankTexture","lensesMirrorMultipassSRP","staticMultipassSRP","mirrorMultipassSRP","B3D_TRANSITION_MIRROR_DYNAMIC","b3dGlasses","_this$b3dGlasses2","getMirrorMaterial","updateCubeEnvMap","glassesWorldMatrix","landmark","setLinearTosRGBIridescence","B3D","additionalObject","GLTF","setScalar","envMapsLoaders","headPosesCount","defaultHeadPoses","isB3D","getTextures","cachedCheckLensMap","cachedHideLenses","cachedHideFrame","callbacksDefined","cubeMapLoaded","envMapLoaded","processB3DAsset","processGltfAsset","gltfGeometryCallbacks","shouldAddQaHelpers","glassesMatricesCallback","b3dGlassesGeometry","setPose","addQAHelpers","READY","texturePoseIndex","b3dAsset","CanvasTexture","tex","glassesGeometry","useStandardMVP","getGradientMaterial","getTransitionMaterial","clearLandmarkAndLensBBox","parseGltf","landmarkGltf","lensBBGltf","getHeadShadowMap","getApplyNosepadOffset","updateHeadWorldMatrix","glassesMvp","lensInterpolation","lensesParameters","setMaterials","setTransform","getFittingGeometry","getAABB","GlassesInspector","geometryDataEngine","worldMatrixInspect","defaultTargetSize","magicHeadScaleNumber","headZThresholdVertexIndex","useFaceBreadthForScaling","unitsChanged","insp","inspectorPositionShift","headMaterial","switchEnvmap","uploadEnvMap","updateEnvMap","initializeOptions","LinearMipMapLinearFilter","dpr","devicePixelRatio","Scene","sceneSorter","Raycaster","setQualityLevel","setQuality","debugBox","getMultipasses","frp","loadEnvMaps","composer","sRGBPass","fillPass","addPass","glassesLoadingPromise","VMshowInspector","withControls","SceneInspectorClass","addInspector","VMhideInspector","hideInspector","switchCubemap","resolveScreenshot","clientWidth","clientHeight","updateRenderers","templeFade","glassesTextureIndex","environmentIntensity","waitGlassesLoading","faceMeasure","rendererSize","updateMirrorTexture","headpose","mirrorPose","setHeadPoses","faceFeatureMeasurement","pupilDist","videoUpdated","setMirrorVideo","currentPose","glassesPoseIndex","updateHeadAndGlasses","_this3","crop","overwriteHeadPoses","getHeadPosesLenght","setVtoVideo","rSize","newW","newH","faceLoadingPromise","updateVtoTexture","isSinglePoseVideoID","getValidPoseCount","isB3DGlasses","bgTexture","sRGBTexture","hideBg","removePass","hasPass","isSingleTexture","_this4","extractMeshCenter","extractPupilPixels","inspector","BoxHelper","parentElement","updateInspector","removeInspector","_ref$glassesRotation","_ref$templeFade","rejection","_this5","updateSceneObjects","renderType","All","fillCanvas","loadCubeEnvMap","_this6","updateCubeMap","loadEnvMap","envMapsLoaded","_ref2$glassesRotation","_ref2$templeFade","Background","setVisibility","Shadow","headWorldMat","getGlassesPosesCount","cameraMatrixInspect","glassesPositionY","noseRootVertexY","getGlobalShapeHomogeneous","noseTipVertexY","vertexTrue","newOffset","mapVal","headWorld","setScaleGlassesOnly","updateLandmarks","updateAdditionalObjects","updateFittingOrigin","scaleGltfGlasses","setMaterialParameters","getFadeDistanceForGlassesAt","enableCrop","widthRatio","heightRatio","cropOffsetX","cropOffsetY","eyeCenterY","getEyeCenterY","headPoseIndex","forceUpdateHead","forceUpdateGlasses","useDefaultHeadPoses","_this7","matrices","updated","activateTransmission","setSortInfo","getActualGlasses","getGlassesData","updateHead","getHeadShape","getHeadUV","getHeadTriangulation","debugHead","headZThreshold","useDiscardOverZPos","inMin","inMax","outMin","outMax","maps","_this8","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","Memo","getOwnPropertyNames","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","number","symbol","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","exact","checkPropTypes","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextProvider","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","features","pause","export","autoPause","latency","preloadedState","origDispatch","devTools","__REDUX_DEVTOOLS_EXTENSION__","composeWithEnhancer","__esModule","devToolsEnhancer","logOnly","objectKeys","newKey"],"sourceRoot":""}